Задание 1: Измерение температуры и влажности с DHT11
cpp#include <DHT.h> #define DHTPIN 2 // Пин, к которому подключен DHT11 #define DHTTYPE DHT11 // Указываем тип сенсора DHT dht(DHTPIN, DHTTYPE); // Создаем объект DHT void setup() { Serial.begin(9600); // Инициализируем последовательный порт dht.begin(); // Инициализируем сенсор DHT } void loop() { delay(2000); // Задержка между измерениями float h = dht.readHumidity(); // Чтение влажности float t = dht.readTemperature(); // Чтение температуры // Проверяем, удалось ли получить данные if (isnan(h) || isnan(t)) { Serial.println("Ошибка чтения с DHT!"); return; } // Выводим результаты Serial.print("Температура: "); Serial.print(t); Serial.print(" °C, Влажность: "); Serial.print(h); Serial.println(" %"); }
Задание 2: Определение комфорта в помещении
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Ошибка чтения с DHT!"); return; } // Проверка комфорта if (h > 60 || t > 25) { Serial.println("Неприятные условия!"); } else { Serial.println("Условия комфортные."); } }
Задание 3: Логирование данных в Serial Monitor
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Ошибка чтения с DHT!"); return; } Serial.print("Температура: "); Serial.print(t); Serial.print(" °C, Влажность: "); Serial.print(h); Serial.println(" %"); }
Задание 4: Сигнализация при высоких температурах
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); float t = dht.readTemperature(); if (isnan(t)) { Serial.println("Ошибка чтения с DHT!"); return; } if (t > 30) { Serial.println("Предупреждение: Высокая температура!"); } }
Задание 5: Вывод значений на LCD-дисплей (если есть)
cpp#include <DHT.h> #include <LiquidCrystal.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Инициализация LCD void setup() { lcd.begin(16, 2); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { lcd.print("Ошибка!"); return; } lcd.clear(); lcd.print("T:"); lcd.print(t); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("H:"); lcd.print(h); lcd.print("%"); }
Задание 1: Построение графика температуры и влажности с использованием SD-карты
cpp#include <DHT.h> #include <SPI.h> #include <SD.h> #define DHTPIN 2 #define DHTTYPE DHT11 #define chipSelect 10 DHT dht(DHTPIN, DHTTYPE); File dataFile; void setup() { Serial.begin(9600); dht.begin(); SD.begin(chipSelect); dataFile = SD.open("data.txt", FILE_WRITE); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (dataFile) { dataFile.print("Температура: "); dataFile.print(t); dataFile.print(" °C, Влажность: "); dataFile.print(h); dataFile.println(" %"); dataFile.flush(); // Сохраняем данные на SD-карте } else { Serial.println("Ошибка открытия файла!"); } }
Задание 2: Умный термометр с Wi-Fi
cpp#include <DHT.h> #include <ESP8266WiFi.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Настройки Wi-Fi const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); dht.begin(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); Serial.print("Температура: "); Serial.print(t); Serial.print(" °C, Влажность: "); Serial.print(h); Serial.println(" %"); }
Задание 3: Управление вентилятором в зависимости от температуры
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 #define FAN_PIN 9 // Пин для вентилятора DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); pinMode(FAN_PIN, OUTPUT); } void loop() { delay(2000); float t = dht.readTemperature(); if (isnan(t)) { Serial.println("Ошибка чтения с DHT!"); return; } if (t > 25) { digitalWrite(FAN_PIN, HIGH); // Включаем вентилятор } else { digitalWrite(FAN_PIN, LOW); // Выключаем вентилятор } }
Задание 4: Умный климат-контроль с LCD-дисплеем
cpp#include <DHT.h> #include <LiquidCrystal.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Инициализация LCD void setup() { lcd.begin(16, 2); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { lcd.print("Ошибка!"); return; } lcd.clear(); lcd.print("T:"); lcd.print(t); lcd.print("C H:"); lcd.print(h); lcd.print("%"); // Условия для включения/выключения вентилятора if (h > 60) { lcd.setCursor(0, 1); lcd.print("Влажность высокая!"); } }
Задание 5: Отправка данных на сервер через HTTP
cpp#include <DHT.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Настройки Wi-Fi const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* server = "http://your-server.com"; // URL вашего сервера void setup() { Serial.begin(9600); dht.begin(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); // Отправка данных на сервер WiFiClient client; if (client.connect(server, 80)) { client.print(String("GET /update?temp=") + t + "&hum=" + h + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: close\r\n\r\n"); } }
Задание 1: Чтение значений света с LDR
cpp#define LDR_PIN A0 // Пин, к которому подключен LDR void setup() { Serial.begin(9600); } void loop() { int lightValue = analogRead(LDR_PIN); // Чтение значения с LDR Serial.print("Уровень света: "); Serial.println(lightValue); delay(1000); }
Задание 2: Сигнализация при низком уровне света
cpp#define LDR_PIN A0 // Пин для LDR #define LED_PIN 9 // Пин для светодиода void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { int lightValue = analogRead(LDR_PIN); Serial.print("Уровень света: "); Serial.println(lightValue); // Включаем светодиод при низком уровне света if (lightValue < 200) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } delay(1000); }
Задание 3: Использование LDR для автоматического управления освещением
cpp#define LDR_PIN A0 #define RELAY_PIN 8 // Пин для реле void setup() { pinMode(RELAY_PIN, OUTPUT); Serial.begin(9600); } void loop() { int lightValue = analogRead(LDR_PIN); Serial.print("Уровень света: "); Serial.println(lightValue); // Включаем реле при низком уровне света if (lightValue < 200) { digitalWrite(RELAY_PIN, HIGH); } else { digitalWrite(RELAY_PIN, LOW); } delay(1000); }
Задание 4: Вывод уровня света на LCD-дисплей
cpp#include <LiquidCrystal.h> #define LDR_PIN A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Инициализация LCD void setup() { lcd.begin(16, 2); } void loop() { int lightValue = analogRead(LDR_PIN); lcd.clear(); lcd.print("Уровень света: "); lcd.setCursor(0, 1); lcd.print(lightValue); delay(1000); }
Задание 5: Создание графика уровня света с использованием Serial Plotter
cpp#define LDR_PIN A0 void setup() { Serial.begin(9600); } void loop() { int lightValue = analogRead(LDR_PIN); Serial.println(lightValue); delay(100); // Отправляем данные каждые 100 мс }
Задание 1: Автоматическая регулировка яркости светодиода
cpp#define LDR_PIN A0 #define LED_PIN 9 // Пин для светодиода void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { int lightValue = analogRead(LDR_PIN); int brightness = map(lightValue, 0, 1023, 255, 0); // Преобразуем значение analogWrite(LED_PIN, brightness); // Устанавливаем яркость delay(1000); }
Задание 2: Ведение журнала уровня света на SD-карте
cpp#include <SPI.h> #include <SD.h> #define LDR_PIN A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("lightData.txt", FILE_WRITE); } void loop() { int lightValue = analogRead(LDR_PIN); if (dataFile) { dataFile.println(lightValue); // Запись данных в файл dataFile.flush(); } else { Serial.println("Ошибка открытия файла!"); } delay(1000); }
Задание 3: Создание приложения для визуализации уровня света с использованием Wi-Fi
cpp#include <ESP8266WiFi.h> #define LDR_PIN A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); } void loop() { int lightValue = analogRead(LDR_PIN); Serial.print("Уровень света: "); Serial.println(lightValue); delay(1000); }
Задание 4: Создание автоматической системы управления освещением
cpp#define LDR_PIN A0 #define RELAY_PIN 8 void setup() { pinMode(RELAY_PIN, OUTPUT); Serial.begin(9600); } void loop() { int lightValue = analogRead(LDR_PIN); if (lightValue < 300) { // Низкий уровень света digitalWrite(RELAY_PIN, HIGH); // Включить свет } else { digitalWrite(RELAY_PIN, LOW); // Выключить свет } delay(1000); }
Задание 5: Создание сервера для управления освещением через веб-интерфейс
cpp#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #define LDR_PIN A0 #define RELAY_PIN 8 ESP8266WebServer server(80); void handleRoot() { int lightValue = analogRead(LDR_PIN); String message = "Уровень света: " + String(lightValue); server.send(200, "text/plain", message); } void setup() { pinMode(RELAY_PIN, OUTPUT); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", handleRoot); server.begin(); } void loop() { server.handleClient(); }
Задание 1: Обнаружение движения с PIR
cpp#define PIR_PIN 2 // Пин для PIR сенсора void setup() { pinMode(PIR_PIN, INPUT); Serial.begin(9600); } void loop() { int motion = digitalRead(PIR_PIN); // Чтение значения с PIR if (motion) { Serial.println("Движение обнаружено!"); } else { Serial.println("Движения нет."); } delay(1000); }
Задание 2: Включение светодиода при обнаружении движения
cpp#define PIR_PIN 2 // Пин для PIR #define LED_PIN 9 // Пин для светодиода void setup() { pinMode(PIR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено!"); digitalWrite(LED_PIN, HIGH); // Включаем светодиод } else { digitalWrite(LED_PIN, LOW); // Выключаем светодиод } delay(1000); }
Задание 3: Использование PIR для автоматического включения освещения
cpp#define PIR_PIN 2 #define RELAY_PIN 8 // Пин для реле void setup() { pinMode(PIR_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); Serial.begin(9600); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено! Включаем свет."); digitalWrite(RELAY_PIN, HIGH); // Включаем свет } else { digitalWrite(RELAY_PIN, LOW); // Выключаем свет } delay(1000); }
Задание 4: Отправка уведомлений на телефон при обнаружении движения
cpp#include <ESP8266WiFi.h> #include <WiFiClient.h> #define PIR_PIN 2 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { pinMode(PIR_PIN, INPUT); Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено!"); // Отправка уведомления (например, через IFTTT или другой API) } delay(1000); }
Задание 5: Вывод информации на LCD-дисплей
cpp#include <LiquidCrystal.h> #define PIR_PIN 2 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Инициализация LCD void setup() { pinMode(PIR_PIN, INPUT); lcd.begin(16, 2); } void loop() { int motion = digitalRead(PIR_PIN); lcd.clear(); if (motion) { lcd.print("Движение обнаружено!"); } else { lcd.print("Движения нет."); } delay(1000); }
Задание 1: Ведение журнала обнаруженных движений на SD-карте
cpp#include <SPI.h> #include <SD.h> #define PIR_PIN 2 #define chipSelect 10 File dataFile; void setup() { pinMode(PIR_PIN, INPUT); Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("motionLog.txt", FILE_WRITE); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено!"); if (dataFile) { dataFile.println("Движение обнаружено!"); dataFile.flush(); } } delay(1000); }
Задание 2: Создание системы охраны с SMS-уведомлениями
cpp#include <ESP8266WiFi.h> #include <WiFiClient.h> #define PIR_PIN 2 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { pinMode(PIR_PIN, INPUT); Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено!"); // Отправка SMS через API (например, Twilio) } delay(1000); }
Задание 3: Использование PIR для управления камерами видеонаблюдения
cpp#define PIR_PIN 2 #define CAMERA_PIN 8 // Пин для управления камерой void setup() { pinMode(PIR_PIN, INPUT); pinMode(CAMERA_PIN, OUTPUT); Serial.begin(9600); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено! Включаем камеру."); digitalWrite(CAMERA_PIN, HIGH); // Включаем камеру delay(10000); // Камера будет работать 10 секунд digitalWrite(CAMERA_PIN, LOW); // Выключаем камеру } delay(1000); }
Задание 4: Автоматическое выключение света при отсутствии движения
cpp#define PIR_PIN 2 #define RELAY_PIN 8 // Пин для реле void setup() { pinMode(PIR_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); Serial.begin(9600); } void loop() { int motion = digitalRead(PIR_PIN); if (motion) { Serial.println("Движение обнаружено! Включаем свет."); digitalWrite(RELAY_PIN, HIGH); // Включаем свет } else { Serial.println("Движения нет! Выключаем свет."); digitalWrite(RELAY_PIN, LOW); // Выключаем свет } delay(1000); }
Задание 5: Управление охранной системой через веб-интерфейс
cpp#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #define PIR_PIN 2 ESP8266WebServer server(80); void handleRoot() { int motion = digitalRead(PIR_PIN); String message = motion ? "Движение обнаружено!" : "Движения нет."; server.send(200, "text/plain", message); } void setup() { pinMode(PIR_PIN, INPUT); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", handleRoot); server.begin(); } void loop() { server.handleClient(); }
Задание 1: Чтение значений акселерометра с MPU6050
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 accel; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); // Чтение значений акселерометра Serial.print("ax: "); Serial.print(ax); Serial.print(" ay: "); Serial.print(ay); Serial.print(" az: "); Serial.println(az); delay(1000); }
Задание 2: Определение наклона устройства
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 accel; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); float angleX = atan2(ay, az) * 180.0 / PI; // Вычисление угла Serial.print("Угол наклона по X: "); Serial.println(angleX); delay(1000); }
Задание 3: Отслеживание движения по осям X, Y, Z
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 accel; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); Serial.print("ax: "); Serial.print(ax); Serial.print(" ay: "); Serial.print(ay); Serial.print(" az: "); Serial.println(az); delay(1000); }
Задание 4: Управление светодиодом на основе движения
cpp#include <Wire.h> #include <MPU6050.h> #define LED_PIN 9 // Пин для светодиода MPU6050 accel; void setup() { pinMode(LED_PIN, OUTPUT); Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); // Если значение по оси X превышает порог, включаем светодиод if (ax > 10000) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } delay(1000); }
Задание 5: Отправка данных на сервер через Wi-Fi
cpp#include <Wire.h> #include <MPU6050.h> #include <ESP8266WiFi.h> MPU6050 accel; const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); WiFi.begin(ssid, password); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); // Отправка данных на сервер (например, через HTTP) Serial.print("ax: "); Serial.println(ax); delay(1000); }
Задание 1: Создание системы обнаружения падения
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 accel; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); // Определяем падение по значению ускорения if (az < 0) { Serial.println("Падение обнаружено!"); } delay(1000); }
Задание 2: Построение графика движения с использованием Serial Plotter
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 accel; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); Serial.print(ax); Serial.print(", "); Serial.print(ay); Serial.print(", "); Serial.println(az); delay(100); }
Задание 3: Ведение журнала значений акселерометра на SD-карте
cpp#include <Wire.h> #include <MPU6050.h> #include <SPI.h> #include <SD.h> MPU6050 accel; #define chipSelect 10 File dataFile; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); SD.begin(chipSelect); dataFile = SD.open("accelData.txt", FILE_WRITE); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); if (dataFile) { dataFile.print(ax); dataFile.print(", "); dataFile.print(ay); dataFile.print(", "); dataFile.println(az); dataFile.flush(); } else { Serial.println("Ошибка открытия файла!"); } delay(1000); }
Задание 4: Создание приложения для визуализации данных акселерометра через Wi-Fi
cpp#include <Wire.h> #include <MPU6050.h> #include <ESP8266WiFi.h> MPU6050 accel; const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); WiFi.begin(ssid, password); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); // Отправка данных на сервер Serial.print("ax: "); Serial.print(ax); Serial.print(" ay: "); Serial.print(ay); Serial.print(" az: "); Serial.println(az); delay(1000); }
Задание 5: Использование акселерометра для управления игрушками или устройствами
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 accel; void setup() { Wire.begin(); Serial.begin(9600); accel.initialize(); } void loop() { int16_t ax, ay, az; accel.getAcceleration(&ax, &ay, &az); // Управление устройством на основе значений акселерометра if (ax > 10000) { Serial.println("Двигаться вперед"); } else if (ax < -10000) { Serial.println("Двигаться назад"); } delay(1000); }
Задание 1: Измерение расстояния до объекта
cpp#define trigPin 9 // Пин для сигнала #define echoPin 10 // Пин для приема сигнала void setup() { Serial.begin(9600); // Инициализация последовательного порта pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long duration, distance; // Отправляем ультразвуковой сигнал digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Получаем время, за которое сигнал вернулся duration = pulseIn(echoPin, HIGH); // Вычисляем расстояние в сантиметрах distance = duration * 0.034 / 2; // Выводим результат Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Задание 2: Измерение расстояния и включение светодиода при приближении объекта
cpp#define trigPin 9 #define echoPin 10 #define ledPin 8 void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; // Включаем светодиод, если объект ближе 10 см if (distance < 10) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Задание 3: Измерение расстояния с использованием ЖК-дисплея
cpp#include <LiquidCrystal.h> #define trigPin 9 #define echoPin 10 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; lcd.clear(); lcd.print("Расст.: "); lcd.print(distance); lcd.print(" см"); delay(1000); }
Задание 4: Сигнализация при слишком близком расстоянии
cpp#define trigPin 9 #define echoPin 10 #define buzzerPin 8 void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(buzzerPin, OUTPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; // Если расстояние меньше 5 см, включаем буззер if (distance < 5) { digitalWrite(buzzerPin, HIGH); } else { digitalWrite(buzzerPin, LOW); } Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Задание 5: Построение графика расстояний на Serial Plotter
cppvoid setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; Serial.println(distance); delay(100); }
Задание 1: Создание системы предупреждения о препятствии с помощью серво
cpp#include <Servo.h> #define trigPin 9 #define echoPin 10 Servo myServo; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); myServo.attach(6); // Подключаем серво к пину 6 } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; if (distance < 15) { myServo.write(90); // Поворачиваем серво на 90 градусов } else { myServo.write(0); // Возвращаем в исходное положение } Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Задание 2: Использование нескольких сенсоров расстояния для создания карты окружения
cpp#define trigPin1 9 #define echoPin1 10 #define trigPin2 11 #define echoPin2 12 void setup() { Serial.begin(9600); pinMode(trigPin1, OUTPUT); pinMode(echoPin1, INPUT); pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT); } void loop() { long distance1, distance2; distance1 = measureDistance(trigPin1, echoPin1); distance2 = measureDistance(trigPin2, echoPin2); Serial.print("Расстояние 1: "); Serial.print(distance1); Serial.print(" см, Расстояние 2: "); Serial.print(distance2); Serial.println(" см"); delay(1000); } long measureDistance(int trigPin, int echoPin) { long duration; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; }
Задание 3: Построение тепловой карты с помощью нескольких датчиков
cpp#define NUM_SENSORS 3 int trigPins[NUM_SENSORS] = {9, 10, 11}; int echoPins[NUM_SENSORS] = {12, 13, A0}; void setup() { Serial.begin(9600); for (int i = 0; i < NUM_SENSORS; i++) { pinMode(trigPins[i], OUTPUT); pinMode(echoPins[i], INPUT); } } void loop() { for (int i = 0; i < NUM_SENSORS; i++) { long distance = measureDistance(trigPins[i], echoPins[i]); Serial.print("Датчик "); Serial.print(i + 1); Serial.print(": "); Serial.print(distance); Serial.println(" см"); } delay(1000); } long measureDistance(int trigPin, int echoPin) { long duration; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; }
Задание 4: Создание системы автопарковки на основе данных сенсоров расстояния
cpp#define trigPin 9 #define echoPin 10 #define motorPin1 6 #define motorPin2 7 void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); } void loop() { long distance = measureDistance(trigPin, echoPin); if (distance < 20) { // Если объект близко, двигаться назад digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); } else { // Иначе двигаться вперед digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); } Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); } long measureDistance(int trigPin, int echoPin) { long duration; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; }
Задание 5: Создание системы мониторинга уровня воды в резервуаре
cpp#define trigPin 9 #define echoPin 10 void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long distance = measureDistance(trigPin, echoPin); if (distance < 10) { Serial.println("Уровень воды высокий!"); } else { Serial.println("Уровень воды нормальный."); } delay(1000); } long measureDistance(int trigPin, int echoPin) { long duration; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; }
Задание 1: Измерение уровня газа
cpp#define gasPin A0 void setup() { Serial.begin(9600); } void loop() { int gasLevel = analogRead(gasPin); Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 2: Определение опасного уровня газа
cpp#define gasPin A0 #define ledPin 9 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { int gasLevel = analogRead(gasPin); // Если уровень газа выше порога, включаем светодиод if (gasLevel > 300) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 3: Отправка данных о газе через последовательный порт
cpp#define gasPin A0 void setup() { Serial.begin(9600); } void loop() { int gasLevel = analogRead(gasPin); Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 4: Активация сигнализации при повышенном уровне газа
cpp#define gasPin A0 #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { int gasLevel = analogRead(gasPin); // Если уровень газа выше порога, включаем буззер if (gasLevel > 300) { digitalWrite(buzzerPin, HIGH); } else { digitalWrite(buzzerPin, LOW); } Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 5: Ведение журнала уровня газа на SD-карте
cpp#include <SPI.h> #include <SD.h> #define gasPin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("gasData.txt", FILE_WRITE); } void loop() { int gasLevel = analogRead(gasPin); if (dataFile) { dataFile.println(gasLevel); dataFile.flush(); } else { Serial.println("Ошибка открытия файла!"); } Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 1: Автоматизация вентиляции при повышенном уровне газа
cpp#define gasPin A0 #define fanPin 9 void setup() { Serial.begin(9600); pinMode(fanPin, OUTPUT); } void loop() { int gasLevel = analogRead(gasPin); // Включаем вентилятор, если уровень газа слишком высокий if (gasLevel > 300) { digitalWrite(fanPin, HIGH); } else { digitalWrite(fanPin, LOW); } Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 2: Создание системы удаленного мониторинга уровня газа через Wi-Fi
cpp#include <ESP8266WiFi.h> #define gasPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); } void loop() { int gasLevel = analogRead(gasPin); // Отправка данных на сервер (или другой хост) Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 3: Отправка уведомлений о высоком уровне газа на телефон через Telegram
cpp#include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #define gasPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* botToken = "your_BOT_TOKEN"; const char* chatId = "your_CHAT_ID"; WiFiClientSecure client; UniversalTelegramBot bot(botToken, client); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); client.setInsecure(); } void loop() { int gasLevel = analogRead(gasPin); if (gasLevel > 300) { bot.sendMessage(chatId, "Внимание! Высокий уровень газа!", ""); } Serial.print("Уровень газа: "); Serial.println(gasLevel); delay(1000); }
Задание 4: Построение графика уровня газа на Serial Plotter
cpp#define gasPin A0 void setup() { Serial.begin(9600); } void loop() { int gasLevel = analogRead(gasPin); Serial.println(gasLevel); delay(100); }
Задание 5: Создание системы анализа данных о газе и их визуализация на веб-странице
cpp#include <ESP8266WebServer.h> #define gasPin A0 ESP8266WebServer server(80); void setup() { Serial.begin(9600); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", HTTP_GET, []() { int gasLevel = analogRead(gasPin); String message = "Уровень газа: " + String(gasLevel); server.send(200, "text/plain", message); }); server.begin(); } void loop() { server.handleClient(); }
Задание 1: Измерение уровня звука
cpp#define micPin A0 void setup() { Serial.begin(9600); } void loop() { int soundLevel = analogRead(micPin); Serial.print("Уровень звука: "); Serial.println(soundLevel); delay(1000); }
Задание 2: Включение светодиода при превышении порога звука
cpp#define micPin A0 #define ledPin 9 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { int soundLevel = analogRead(micPin); // Если уровень звука превышает порог, включаем светодиод if (soundLevel > 512) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } Serial.print("Уровень звука: "); Serial.println(soundLevel); delay(1000); }
Задание 3: Регистрация звуковых событий
cpp#define micPin A0 void setup() { Serial.begin(9600); } void loop() { int soundLevel = analogRead(micPin); // Регистрация звукового события if (soundLevel > 512) { Serial.println("Звук обнаружен!"); } delay(1000); }
Задание 4: Измерение уровня звука и отображение на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define micPin A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Serial.begin(9600); lcd.begin(16, 2); } void loop() { int soundLevel = analogRead(micPin); lcd.clear(); lcd.print("Уровень звука: "); lcd.print(soundLevel); delay(1000); }
Задание 5: Создание системы мониторинга звука с записью в файл
cpp#include <SPI.h> #include <SD.h> #define micPin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("soundData.txt", FILE_WRITE); } void loop() { int soundLevel = analogRead(micPin); if (dataFile) { dataFile.println(soundLevel); dataFile.flush(); } else { Serial.println("Ошибка открытия файла!"); } Serial.print("Уровень звука: "); Serial.println(soundLevel); delay(1000); }
Задание 1: Запись звука на SD-карту
cpp#include <SPI.h> #include <SD.h> #define micPin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("soundData.txt", FILE_WRITE); } void loop() { int soundLevel = analogRead(micPin); if (dataFile) { dataFile.println(soundLevel); dataFile.flush(); } else { Serial.println("Ошибка открытия файла!"); } delay(100); }
Задание 2: Анализ звуковых сигналов и реакция на них
cpp#define micPin A0 #define ledPin 9 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { int soundLevel = analogRead(micPin); // Реакция на резкий звук if (soundLevel > 800) { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); } Serial.print("Уровень звука: "); Serial.println(soundLevel); delay(1000); }
Задание 3: Отправка уведомлений о звуковых событиях через Telegram
cpp#include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #define micPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* botToken = "your_BOT_TOKEN"; const char* chatId = "your_CHAT_ID"; WiFiClientSecure client; UniversalTelegramBot bot(botToken, client); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); client.setInsecure(); } void loop() { int soundLevel = analogRead(micPin); if (soundLevel > 800) { bot.sendMessage(chatId, "Внимание! Высокий уровень звука!", ""); } Serial.print("Уровень звука: "); Serial.println(soundLevel); delay(1000); }
Задание 4: Создание звукового датчика с использованием Wi-Fi
cpp#include <ESP8266WiFi.h> #define micPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); } void loop() { int soundLevel = analogRead(micPin); Serial.print("Уровень звука: "); Serial.println(soundLevel); delay(1000); }
Задание 5: Построение графика уровня звука на Serial Plotter
cpp#define micPin A0 void setup() { Serial.begin(9600); } void loop() { int soundLevel = analogRead(micPin); Serial.println(soundLevel); delay(100); }
Задание 1: Измерение уровня шума
cpp#define noisePin A0 void setup() { Serial.begin(9600); } void loop() { int noiseLevel = analogRead(noisePin); Serial.print("Уровень шума: "); Serial.println(noiseLevel); delay(1000); }
Задание 2: Включение светодиода при превышении порога шума
cpp#define noisePin A0 #define ledPin 9 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { int noiseLevel = analogRead(noisePin); // Если уровень шума превышает порог, включаем светодиод if (noiseLevel > 512) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } Serial.print("Уровень шума: "); Serial.println(noiseLevel); delay(1000); }
Задание 3: Регистрация шумовых событий
cpp#define noisePin A0 void setup() { Serial.begin(9600); } void loop() { int noiseLevel = analogRead(noisePin); // Регистрация шумового события if (noiseLevel > 512) { Serial.println("Шум обнаружен!"); } delay(1000); }
Задание 4: Измерение уровня шума и отображение на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define noisePin A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Serial.begin(9600); lcd.begin(16, 2); } void loop() { int noiseLevel = analogRead(noisePin); lcd.clear(); lcd.print("Уровень шума: "); lcd.print(noiseLevel); delay(1000); }
Задание 5: Создание системы мониторинга шума с записью в файл
cpp#include <SPI.h> #include <SD.h> #define noisePin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("noiseData.txt", FILE_WRITE); } void loop() { int noiseLevel = analogRead(noisePin); if (dataFile) { dataFile.println(noiseLevel); dataFile.flush(); } else { Serial.println("Ошибка открытия файла!"); } Serial.print("Уровень шума: "); Serial.println(noiseLevel); delay(1000); }
Задание 1: Автоматизация вентиляции при высоком уровне шума
cpp#define noisePin A0 #define fanPin 9 void setup() { Serial.begin(9600); pinMode(fanPin, OUTPUT); } void loop() { int noiseLevel = analogRead(noisePin); // Включаем вентилятор, если уровень шума слишком высокий if (noiseLevel > 512) { digitalWrite(fanPin, HIGH); } else { digitalWrite(fanPin, LOW); } Serial.print("Уровень шума: "); Serial.println(noiseLevel); delay(1000); }
Задание 2: Создание системы удаленного мониторинга уровня шума через Wi-Fi
cpp#include <ESP8266WiFi.h> #define noisePin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); } void loop() { int noiseLevel = analogRead(noisePin); Serial.print("Уровень шума: "); Serial.println(noiseLevel); delay(1000); }
Задание 5: Создание системы анализа данных о шуме и их визуализация на веб-странице
cpp#include <ESP8266WebServer.h> #define noisePin A0 ESP8266WebServer server(80); void setup() { Serial.begin(9600); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", HTTP_GET, []() { int noiseLevel = analogRead(noisePin); String message = "Уровень шума: " + String(noiseLevel); server.send(200, "text/plain", message); }); server.begin(); } void loop() { server.handleClient(); }
Задание 1: Измерение атмосферного давления
cpp#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка инициализации сенсора BMP280!"); while (1); } } void loop() { float pressure = bmp.readPressure() / 100.0F; // Перевод в гПа Serial.print("Давление: "); Serial.print(pressure); Serial.println(" гПа"); delay(1000); }
Задание 2: Вывод давления на ЖК-дисплей
cpp#include <Wire.h> #include <Adafruit_BMP280.h> #include <LiquidCrystal.h> Adafruit_BMP280 bmp; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Serial.begin(9600); lcd.begin(16, 2); if (!bmp.begin()) { lcd.print("Ошибка датчика"); while (1); } } void loop() { float pressure = bmp.readPressure() / 100.0F; lcd.clear(); lcd.print("Давление: "); lcd.print(pressure); lcd.print(" гПа"); delay(1000); }
Задание 3: Измерение температуры с помощью сенсора давления
cpp#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP280!"); while (1); } } void loop() { float temperature = bmp.readTemperature(); Serial.print("Температура: "); Serial.print(temperature); Serial.println(" °C"); delay(1000); }
Задание 4: Вывод давления и температуры на OLED дисплей
cpp#include <Wire.h> #include <Adafruit_BMP280.h> #include <Adafruit_SSD1306.h> Adafruit_BMP280 bmp; Adafruit_SSD1306 display(128, 64, &Wire, -1); void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка сенсора!"); while (1); } display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.print("Давление: "); display.print(bmp.readPressure() / 100.0F); display.println(" гПа"); display.setCursor(0, 20); display.print("Температура: "); display.print(bmp.readTemperature()); display.println(" °C"); display.display(); delay(1000); }
Задание 5: Автоматическое включение вентилятора при высоком давлении
cpp#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; #define fanPin 9 void setup() { Serial.begin(9600); pinMode(fanPin, OUTPUT); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP280!"); while (1); } } void loop() { float pressure = bmp.readPressure() / 100.0F; if (pressure > 1015) { digitalWrite(fanPin, HIGH); // Включить вентилятор } else { digitalWrite(fanPin, LOW); // Выключить вентилятор } Serial.print("Давление: "); Serial.print(pressure); Serial.println(" гПа"); delay(1000); }
Задание 1: Создание системы мониторинга атмосферного давления с историей данных
cpp#include <Wire.h> #include <Adafruit_BMP280.h> #include <SD.h> Adafruit_BMP280 bmp; #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP280!"); while (1); } if (!SD.begin(chipSelect)) { Serial.println("Ошибка инициализации SD-карты!"); return; } dataFile = SD.open("pressureData.txt", FILE_WRITE); } void loop() { float pressure = bmp.readPressure() / 100.0F; if (dataFile) { dataFile.println(pressure); dataFile.flush(); } else { Serial.println("Ошибка записи файла!"); } Serial.print("Давление: "); Serial.print(pressure); Serial.println(" гПа"); delay(1000); }
Задание 2: Система прогнозирования погоды на основе данных о давлении
cpp#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP280!"); while (1); } } void loop() { float pressure = bmp.readPressure() / 100.0F; if (pressure > 1020) { Serial.println("Ожидается хорошая погода."); } else if (pressure < 1000) { Serial.println("Возможны осадки."); } else { Serial.println("Погода стабильная."); } delay(1000); }
Задание 3: Визуализация атмосферного давления на веб-странице
cpp#include <ESP8266WiFi.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; ESP8266WebServer server(80); void setup() { Serial.begin(9600); WiFi.begin("your_SSID", "your_PASSWORD"); bmp.begin(); server.on("/", HTTP_GET, []() { float pressure = bmp.readPressure() / 100.0F; String message = "Давление: " + String(pressure) + " гПа"; server.send(200, "text/plain", message); }); server.begin(); } void loop() { server.handleClient(); }
Задание 4: Построение графика давления с использованием Excel через PLX-DAQ
cpp#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP280!"); while (1); } Serial.println("LABEL,Pressure"); } void loop() { float pressure = bmp.readPressure() / 100.0F; Serial.print("DATA,TIME,"); Serial.println(pressure); delay(1000); }
Задание 5: Система управления дронами на основе высоты (используя барометрическое давление)
cpp#include <Wire.h> #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; #define motorPin 9 void setup() { Serial.begin(9600); pinMode(motorPin, OUTPUT); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP280!"); while (1); } } void loop() { float altitude = bmp.readAltitude(); if (altitude > 50) { digitalWrite(motorPin, HIGH); // Включить мотор (дрон поднимается) } else { digitalWrite(motorPin, LOW); // Выключить мотор (дрон спускается) } Serial.print("Высота: "); Serial.print(altitude); Serial.println(" м"); delay(1000); }
Задание 1: Определение уровня воды
cpp#define waterPin A0 void setup() { Serial.begin(9600); } void loop() { int waterLevel = analogRead(waterPin); Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 2: Определение критического уровня воды
cpp#define waterPin A0 #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterPin); if (waterLevel > 700) { digitalWrite(buzzerPin, HIGH); // Включить сигнал тревоги } else { digitalWrite(buzzerPin, LOW); } Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 3: Автоматическое наполнение резервуара водой
cpp#define waterPin A0 #define pumpPin 9 void setup() { Serial.begin(9600); pinMode(pumpPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterPin); if (waterLevel < 300) { digitalWrite(pumpPin, HIGH); // Включить насос } else { digitalWrite(pumpPin, LOW); // Остановить насос } Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 4: Управление насосом через веб-интерфейс
cpp#include <ESP8266WiFi.h> #define waterPin A0 #define pumpPin 9 ESP8266WebServer server(80); void setup() { Serial.begin(9600); pinMode(pumpPin, OUTPUT); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", HTTP_GET, []() { int waterLevel = analogRead(waterPin); String message = "Уровень воды: " + String(waterLevel); server.send(200, "text/plain", message); }); server.begin(); } void loop() { server.handleClient(); }
Задание 5: Определение уровня воды с записью в SD-карту
cpp#include <SD.h> #define waterPin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("waterLevel.txt", FILE_WRITE); } void loop() { int waterLevel = analogRead(waterPin); if (dataFile) { dataFile.println(waterLevel); dataFile.flush(); } else { Serial.println("Ошибка записи!"); } Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 1: Автоматизация управления поливом на основе уровня воды
cpp#define waterPin A0 #define valvePin 9 void setup() { Serial.begin(9600); pinMode(valvePin, OUTPUT); } void loop() { int waterLevel = analogRead(waterPin); if (waterLevel < 400) { digitalWrite(valvePin, HIGH); // Открыть клапан для полива } else { digitalWrite(valvePin, LOW); // Закрыть клапан } Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 2: Уведомления о низком уровне воды через Telegram
cpp#include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #define waterPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* botToken = "your_BOT_TOKEN"; const char* chatId = "your_CHAT_ID"; WiFiClientSecure client; UniversalTelegramBot bot(botToken, client); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); client.setInsecure(); } void loop() { int waterLevel = analogRead(waterPin); if (waterLevel < 300) { bot.sendMessage(chatId, "Низкий уровень воды!", ""); } Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 3: Контроль уровня воды с отображением на графике
cpp#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); #define waterPin A0 void setup() { Serial.begin(9600); lcd.begin(); lcd.backlight(); } void loop() { int waterLevel = analogRead(waterPin); lcd.clear(); lcd.print("Уровень воды: "); lcd.setCursor(0, 1); lcd.print(waterLevel); delay(1000); }
Задание 4: Система сбора и анализа данных о воде
cpp#include <ESP8266WiFi.h> #define waterPin A0 ESP8266WebServer server(80); void setup() { Serial.begin(9600); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", HTTP_GET, []() { int waterLevel = analogRead(waterPin); String message = "Уровень воды: " + String(waterLevel); server.send(200, "text/plain", message); }); server.begin(); } void loop() { server.handleClient(); }
Задание 5: Управление системой водоснабжения через мобильное приложение
cpp#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define waterPin A0 #define pumpPin 9 ESP8266WebServer server(80); void setup() { Serial.begin(9600); pinMode(pumpPin, OUTPUT); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", HTTP_GET, []() { String message = "Уровень воды: " + String(analogRead(waterPin)); server.send(200, "text/plain", message); }); server.on("/pumpOn", HTTP_GET, []() { digitalWrite(pumpPin, HIGH); server.send(200, "text/plain", "Насос включен"); }); server.on("/pumpOff", HTTP_GET, []() { digitalWrite(pumpPin, LOW); server.send(200, "text/plain", "Насос выключен"); }); server.begin(); } void loop() { server.handleClient(); }
Задание 1: Измерение скорости ветра и вывод в Serial Monitor
cpp#define windPin 2 volatile int windCount = 0; unsigned long lastMillis = 0; void countWind() { windCount++; } void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; // 2 импульса = 1 вращение, 2.4 м/с на каждое вращение Serial.print("Скорость ветра: "); Serial.print(windSpeed); Serial.println(" м/с"); windCount = 0; lastMillis = currentMillis; } }
Задание 2: Включение светодиода при сильном ветре
cpp#define windPin 2 #define ledPin 9 volatile int windCount = 0; unsigned long lastMillis = 0; void countWind() { windCount++; } void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; Serial.print("Скорость ветра: "); Serial.print(windSpeed); Serial.println(" м/с"); if (windSpeed > 10) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } windCount = 0; lastMillis = currentMillis; } }
Задание 3: Вывод скорости ветра на ЖК-дисплей
cpp#include <LiquidCrystal.h> #define windPin 2 volatile int windCount = 0; unsigned long lastMillis = 0; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void countWind() { windCount++; } void setup() { lcd.begin(16, 2); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; lcd.clear(); lcd.print("Скорость ветра:"); lcd.setCursor(0, 1); lcd.print(windSpeed); lcd.print(" м/с"); windCount = 0; lastMillis = currentMillis; } }
Задание 4: Сохранение данных о скорости ветра на SD-карту
cpp#include <SD.h> #define windPin 2 volatile int windCount = 0; unsigned long lastMillis = 0; File dataFile; void countWind() { windCount++; } void setup() { Serial.begin(9600); SD.begin(10); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); dataFile = SD.open("windData.txt", FILE_WRITE); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; if (dataFile) { dataFile.println(windSpeed); dataFile.flush(); } Serial.print("Скорость ветра: "); Serial.println(windSpeed); windCount = 0; lastMillis = currentMillis; } }
Задание 5: Автоматическое закрытие окон при сильном ветре
cpp#define windPin 2 #define motorPin 9 volatile int windCount = 0; unsigned long lastMillis = 0; void countWind() { windCount++; } void setup() { Serial.begin(9600); pinMode(motorPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; Serial.print("Скорость ветра: "); Serial.println(windSpeed); if (windSpeed > 15) { digitalWrite(motorPin, HIGH); // Закрыть окна } else { digitalWrite(motorPin, LOW); // Оставить окна открытыми } windCount = 0; lastMillis = currentMillis; } }
Задание 1: Визуализация данных скорости ветра на графике в реальном времени через веб-интерфейс
cpp#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define windPin 2 volatile int windCount = 0; unsigned long lastMillis = 0; ESP8266WebServer server(80); void countWind() { windCount++; } void setup() { Serial.begin(9600); WiFi.begin("your_SSID", "your_PASSWORD"); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); server.on("/", HTTP_GET, []() { float windSpeed = (windCount / 2.0) * 2.4; String message = "Скорость ветра: " + String(windSpeed) + " м/с"; server.send(200, "text/plain", message); windCount = 0; }); server.begin(); } void loop() { server.handleClient(); }
Задание 2: Уведомления о сильном ветре через Telegram
cpp#include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #define windPin 2 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* botToken = "your_BOT_TOKEN"; const char* chatId = "your_CHAT_ID"; WiFiClientSecure client; UniversalTelegramBot bot(botToken, client); volatile int windCount = 0; unsigned long lastMillis = 0; void countWind() { windCount++; } void setup() { Serial.begin(9600); WiFi.begin(ssid, password); client.setInsecure(); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; if (windSpeed > 15) { bot.sendMessage(chatId, "Сильный ветер: " + String(windSpeed) + " м/с", ""); } windCount = 0; lastMillis = currentMillis; } }
Задание 3: Построение графика скорости ветра с использованием PLX-DAQ и Excel
cpp#include <Wire.h> #define windPin 2 volatile int windCount = 0; unsigned long lastMillis = 0; void countWind() { windCount++; } void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); Serial.println("LABEL,Speed"); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; Serial.print("DATA,TIME,"); Serial.println(windSpeed); windCount = 0; lastMillis = currentMillis; } }
Задание 4: Автоматизация управления генератором на основе силы ветра
cpp#define windPin 2 #define generatorPin 9 volatile int windCount = 0; unsigned long lastMillis = 0; void countWind() { windCount++; } void setup() { Serial.begin(9600); pinMode(generatorPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(windPin), countWind, RISING); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - lastMillis >= 1000) { float windSpeed = (windCount / 2.0) * 2.4; Serial.print("Скорость ветра: "); Serial.println(windSpeed); if (windSpeed > 12) { digitalWrite(generatorPin, HIGH); // Включить генератор } else { digitalWrite(generatorPin, LOW); // Остановить генератор } windCount = 0; lastMillis = currentMillis; } }
Задание 5: Прогнозирование погоды на основе анализа ветровых данных
Задание 1: Измерение осадков и вывод в Serial Monitor
cpp#define rainPin A0 void setup() { Serial.begin(9600); } void loop() { int rainValue = analogRead(rainPin); Serial.print("Осадки: "); Serial.println(rainValue); delay(1000); }
Задание 2: Сигнализация при сильных осадках
cpp#define rainPin A0 #define ledPin 9 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { int rainValue = analogRead(rainPin); Serial.print("Осадки: "); Serial.println(rainValue); if (rainValue > 700) { digitalWrite(ledPin, HIGH); // Сильные осадки — включить светодиод } else { digitalWrite(ledPin, LOW); // Осадки незначительны } delay(1000); }
Задание 3: Отображение уровня осадков на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define rainPin A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); } void loop() { int rainValue = analogRead(rainPin); lcd.clear(); lcd.print("Осадки: "); lcd.setCursor(0, 1); lcd.print(rainValue); delay(1000); }
Задание 4: Запись данных об осадках на SD-карту
cpp#include <SD.h> #define rainPin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("rainData.txt", FILE_WRITE); } void loop() { int rainValue = analogRead(rainPin); if (dataFile) { dataFile.println(rainValue); dataFile.flush(); } Serial.print("Осадки: "); Serial.println(rainValue); delay(1000); }
Задание 5: Включение водоотвода при обнаружении сильных осадков
cpp#define rainPin A0 #define pumpPin 9 void setup() { Serial.begin(9600); pinMode(pumpPin, OUTPUT); } void loop() { int rainValue = analogRead(rainPin); Serial.print("Осадки: "); Serial.println(rainValue); if (rainValue > 800) { digitalWrite(pumpPin, HIGH); // Включить насос } else { digitalWrite(pumpPin, LOW); // Остановить насос } delay(1000); }
Задание 1: Визуализация данных об осадках в реальном времени через веб-интерфейс
cpp#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define rainPin A0 ESP8266WebServer server(80); void setup() { Serial.begin(9600); WiFi.begin("your_SSID", "your_PASSWORD"); server.on("/", HTTP_GET, []() { int rainValue = analogRead(rainPin); String message = "Уровень осадков: " + String(rainValue); server.send(200, "text/plain", message); }); server.begin(); } void loop() { server.handleClient(); }
Задание 2: Уведомления о сильных осадках через Telegram
cpp#include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #define rainPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* botToken = "your_BOT_TOKEN"; const char* chatId = "your_CHAT_ID"; WiFiClientSecure client; UniversalTelegramBot bot(botToken, client); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); client.setInsecure(); } void loop() { int rainValue = analogRead(rainPin); if (rainValue > 800) { bot.sendMessage(chatId, "Сильные осадки обнаружены!", ""); } delay(10000); // Отправлять уведомление каждые 10 секунд }
Задание 3: Анализ долгосрочных данных об осадках с записью на сервер
cpp#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #define rainPin A0 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* serverName = "http://your-server.com/upload"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin(serverName); int rainValue = analogRead(rainPin); String postData = "rainValue=" + String(rainValue); http.POST(postData); http.end(); } delay(60000); // Отправлять данные каждую минуту }
Задание 4: Автоматическое управление крышами для защиты от дождя
cpp#define rainPin A0 #define motorPin 9 void setup() { Serial.begin(9600); pinMode(motorPin, OUTPUT); } void loop() { int rainValue = analogRead(rainPin); if (rainValue > 800) { digitalWrite(motorPin, HIGH); // Закрыть крышу } else { digitalWrite(motorPin, LOW); // Открыть крышу } delay(1000); }
Задание 1: Определение положения устройства (акселерометр)
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> Adafruit_MPU6050 mpu; void setup() { Serial.begin(115200); if (!mpu.begin()) { Serial.println("Не удалось найти MPU6050"); while (1); } } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); Serial.print("Ускорение X: "); Serial.println(a.acceleration.x); Serial.print("Ускорение Y: "); Serial.println(a.acceleration.y); Serial.print("Ускорение Z: "); Serial.println(a.acceleration.z); delay(500); }
Задание 2: Обнаружение падения
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> Adafruit_MPU6050 mpu; void setup() { Serial.begin(115200); if (!mpu.begin()) { Serial.println("Не удалось найти MPU6050"); while (1); } } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); float totalAcceleration = sqrt(sq(a.acceleration.x) + sq(a.acceleration.y) + sq(a.acceleration.z)); if (totalAcceleration > 20) { // Если ускорение слишком высокое, возможно падение Serial.println("Обнаружено падение!"); } delay(100); }
Задание 3: Измерение углов вращения (гироскоп)
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> Adafruit_MPU6050 mpu; void setup() { Serial.begin(115200); if (!mpu.begin()) { Serial.println("Не удалось найти MPU6050"); while (1); } } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); Serial.print("Угловая скорость X: "); Serial.println(g.gyro.x); Serial.print("Угловая скорость Y: "); Serial.println(g.gyro.y); Serial.print("Угловая скорость Z: "); Serial.println(g.gyro.z); delay(500); }
Задание 4: Использование акселерометра и гироскопа для контроля поворотов робота
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> Adafruit_MPU6050 mpu; void setup() { Serial.begin(115200); if (!mpu.begin()) { Serial.println("Не удалось найти MPU6050"); while (1); } } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); // Простой контроль поворотов: если робот наклонен в сторону, выполнить поворот if (g.gyro.x > 1) { Serial.println("Поворот направо"); } else if (g.gyro.x < -1) { Serial.println("Поворот налево"); } delay(500); }
Задание 1: Обнаружение вибрации и вывод в Serial Monitor
cpp#define vibPin 2 void setup() { Serial.begin(9600); pinMode(vibPin, INPUT); } void loop() { int vibValue = digitalRead(vibPin); Serial.print("Вибрация: "); Serial.println(vibValue); delay(1000); }
Задание 2: Включение светодиода при обнаружении вибрации
cpp#define vibPin 2 #define ledPin 9 void setup() { Serial.begin(9600); pinMode(vibPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { int vibValue = digitalRead(vibPin); if (vibValue == HIGH) { digitalWrite(ledPin, HIGH); // Включить светодиод } else { digitalWrite(ledPin, LOW); // Выключить светодиод } delay(100); }
Задание 3: Подсчет количества вибраций за определенный период времени
cpp#define vibPin 2 int count = 0; void setup() { Serial.begin(9600); pinMode(vibPin, INPUT); } void loop() { if (digitalRead(vibPin) == HIGH) { count++; delay(100); // Убеждаемся, что мы не считаем одну и ту же вибрацию несколько раз } Serial.print("Количество вибраций: "); Serial.println(count); delay(1000); }
Задание 4: Отправка данных о вибрации на сервер
cpp#include <WiFiClient.h> #include <ESP8266WiFi.h> #define vibPin 2 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* server = "http://your-server.com/submit"; void setup() { Serial.begin(9600); pinMode(vibPin, INPUT); WiFi.begin(ssid, password); } void loop() { if (WiFi.status() == WL_CONNECTED) { if (digitalRead(vibPin) == HIGH) { WiFiClient client; client.connect(server, 80); client.println("POST /submit HTTP/1.1"); client.println("Host: your-server.com"); client.println("Connection: close"); client.println(); } } delay(1000); }
Задание 5: Включение сигнализации при обнаружении вибрации
cpp#define vibPin 2 #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(vibPin, INPUT); pinMode(buzzerPin, OUTPUT); } void loop() { if (digitalRead(vibPin) == HIGH) { digitalWrite(buzzerPin, HIGH); // Включить сигнализацию delay(1000); digitalWrite(buzzerPin, LOW); // Выключить сигнализацию } delay(100); }
Задание 1: Система мониторинга вибрации для оборудования
Создание системы, которая будет отслеживать вибрации на оборудовании и отправлять уведомления при превышении определенных значений.
Задание 2: Адаптивный контроль за состоянием конструкции (например, мост)
Разработка системы, которая будет контролировать вибрации в конструкции моста и сигнализировать об аномалиях.
Задание 1: Измерение влажности почвы и вывод в Serial Monitor
cpp#define soilMoisturePin A0 void setup() { Serial.begin(9600); } void loop() { int moistureValue = analogRead(soilMoisturePin); Serial.print("Влажность почвы: "); Serial.println(moistureValue); delay(1000); }
Задание 2: Включение полива при низкой влажности почвы
cpp#define soilMoisturePin A0 #define pumpPin 9 void setup() { Serial.begin(9600); pinMode(pumpPin, OUTPUT); } void loop() { int moistureValue = analogRead(soilMoisturePin); if (moistureValue < 300) { // Порог влажности digitalWrite(pumpPin, HIGH); // Включить насос } else { digitalWrite(pumpPin, LOW); // Выключить насос } delay(1000); }
Задание 3: Отображение уровня влажности на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define soilMoisturePin A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); } void loop() { int moistureValue = analogRead(soilMoisturePin); lcd.clear(); lcd.print("Влажность: "); lcd.setCursor(0, 1); lcd.print(moistureValue); delay(1000); }
Задание 4: Запись данных о влажности на SD-карту
cpp#include <SD.h> #define soilMoisturePin A0 #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); dataFile = SD.open("moistureData.txt", FILE_WRITE); } void loop() { int moistureValue = analogRead(soilMoisturePin); if (dataFile) { dataFile.println(moistureValue); dataFile.flush(); } Serial.print("Влажность почвы: "); Serial.println(moistureValue); delay(1000); }
Задание 5: Уведомление о низкой влажности почвы через SMS
cpp#include <SoftwareSerial.h> #define soilMoisturePin A0 SoftwareSerial sim800(7, 8); // RX, TX void setup() { Serial.begin(9600); sim800.begin(9600); } void loop() { int moistureValue = analogRead(soilMoisturePin); if (moistureValue < 300) { sim800.println("AT+CMGS=\"your_number\""); // Замените на ваш номер delay(100); sim800.println("Внимание! Низкая влажность почвы!"); delay(100); sim800.write(26); // Ctrl+Z для отправки сообщения } delay(10000); }
Задание 1: Умная система полива на основе влажности почвы и метеоусловий
Создание системы, которая автоматически регулирует полив в зависимости от влажности почвы и погодных условий.
Задание 2: Мониторинг и анализ влажности почвы в режиме реального времени через веб-интерфейс
Разработка системы, которая отображает данные о влажности почвы в реальном времени через веб-интерфейс.
На этом этапе я закончил с заданиями по всем упомянутым сенсорам. Если есть другие запросы или дополнительные детали, которые нужно проработать, дайте знать!
Задание 1: Измерение пульса и уровня кислорода в крови
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); Serial.print("Пульс: "); Serial.print(pox.getHeartRate()); Serial.print(" bpm, Уровень кислорода: "); Serial.print(pox.getSpO2()); Serial.println(" %"); delay(1000); }
Задание 2: Подсчет пульса за определенный период
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); int heartRate = pox.getHeartRate(); Serial.print("Пульс: "); Serial.println(heartRate); delay(5000); }
Задание 3: Визуализация данных на ЖК-дисплее
cpp#include <LiquidCrystal.h> #include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); pox.begin(); } void loop() { pox.update(); lcd.clear(); lcd.print("HR: "); lcd.print(pox.getHeartRate()); lcd.setCursor(0, 1); lcd.print("SpO2: "); lcd.print(pox.getSpO2()); delay(1000); }
Задание 4: Отправка данных на сервер через WiFi
cpp#include <WiFi.h> #include <Wire.h> #include "MAX30100_PulseOximeter.h" const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* server = "http://your-server.com/submit"; MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); WiFi.begin(ssid, password); } void loop() { pox.update(); if (WiFi.status() == WL_CONNECTED) { // Отправка данных на сервер WiFiClient client; client.connect(server, 80); client.print("GET /submit?hr="); client.print(pox.getHeartRate()); client.print("&spo2="); client.print(pox.getSpO2()); client.println(" HTTP/1.1"); } delay(10000); }
Задание 5: Аудиоуведомление при низком уровне кислорода
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" #define buzzerPin 9 MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); pox.begin(); } void loop() { pox.update(); if (pox.getSpO2() < 90) { digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 1: Умное устройство для мониторинга состояния здоровья
Создание устройства, которое отслеживает пульс и уровень кислорода и отправляет уведомления на телефон, если значения выходят за пределы нормы.
Задание 2: Анализ данных о пульсе и кислороде в реальном времени
Разработка приложения для отображения данных в реальном времени с использованием графиков и истории изменений.
Задание 1: Измерение массы с использованием HX711
cpp#include "HX711.h" HX711 scale; void setup() { Serial.begin(9600); scale.begin(3, 2); // DT, SCK scale.set_scale(2280.f); // Установите калибровочный коэффициент } void loop() { Serial.print("Масса: "); Serial.print(scale.get_units(10), 1); Serial.println(" g"); delay(1000); }
Задание 2: Калибровка весов
cpp#include "HX711.h" HX711 scale; void setup() { Serial.begin(9600); scale.begin(3, 2); Serial.println("Калибровка весов..."); scale.set_scale(); // Установить калибровочный коэффициент } void loop() { Serial.print("Масса: "); Serial.print(scale.get_units(10), 1); Serial.println(" g"); delay(1000); }
Задание 3: Автоматическое выключение при отсутствии нагрузки
cpp#include "HX711.h" HX711 scale; void setup() { Serial.begin(9600); scale.begin(3, 2); } void loop() { if (scale.get_units(10) == 0) { Serial.println("Выключение весов..."); // Здесь можно добавить код для отключения питания } delay(1000); }
Задание 4: Сохранение данных о весе на SD-карту
cpp#include <SD.h> #include "HX711.h" HX711 scale; #define chipSelect 10 File dataFile; void setup() { Serial.begin(9600); SD.begin(chipSelect); scale.begin(3, 2); dataFile = SD.open("weights.txt", FILE_WRITE); } void loop() { float weight = scale.get_units(10); if (dataFile) { dataFile.println(weight); dataFile.flush(); } delay(1000); }
Задание 5: Сигнализация при превышении веса
cpp#include "HX711.h" HX711 scale; #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); scale.begin(3, 2); } void loop() { if (scale.get_units(10) > 1000) { // Порог превышения digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 1: Умные весы с отправкой данных в облако
Создание системы, которая будет отправлять данные о весе на облачный сервис для дальнейшего анализа.
Задание 2: Контроль массы для автоматизированной системы упаковки
Разработка системы, которая будет автоматически упаковывать товары в зависимости от их массы.
Задание 1: Измерение угла поворота потенциометра
cpp#define potPin A0 void setup() { Serial.begin(9600); } void loop() { int potValue = analogRead(potPin); Serial.print("Угол: "); Serial.println(map(potValue, 0, 1023, 0, 360)); // Преобразование в угол delay(1000); }
Задание 2: Установка яркости светодиода в зависимости от угла поворота
cpp#define potPin A0 #define ledPin 9 void setup() { pinMode(ledPin, OUTPUT); } void loop() { int potValue = analogRead(potPin); analogWrite(ledPin, map(potValue, 0, 1023, 0, 255)); delay(100); }
Задание 3: Установка скорости вращения мотора в зависимости от угла
cpp#define potPin A0 #define motorPin 9 void setup() { pinMode(motorPin, OUTPUT); } void loop() { int potValue = analogRead(potPin); analogWrite(motorPin, map(potValue, 0, 1023, 0, 255)); delay(100); }
Задание 4: Установка звука в зависимости от угла поворота
cpp#include <Tone.h> #define potPin A0 #define speakerPin 9 Tone tone; void setup() { tone.begin(speakerPin); } void loop() { int potValue = analogRead(potPin); tone.setFrequency(map(potValue, 0, 1023, 100, 1000)); delay(100); }
Задание 5: Создание графического интерфейса для управления потенциометром
cpp// Код для создания графического интерфейса на компьютере, например, с использованием Processing.
Задание 1: Диммер для управления яркостью света
Создание устройства, которое регулирует яркость света в зависимости от положения потенциометра.
Задание 2: Контроль угла поворота сервомотора с использованием потенциометра
Разработка системы, в которой угол поворота сервомотора зависит от положения потенциометра.
Задание 1: Измерение качества воздуха с помощью SDS011
cpp#include <SoftwareSerial.h> #include "SDS011.h" SDS011 sds011(2, 3); // RX, TX void setup() { Serial.begin(9600); sds011.begin(); } void loop() { float pm25, pm10; sds011.read(&pm25, &pm10); Serial.print("PM2.5: "); Serial.print(pm25); Serial.print(" µg/m³, PM10: "); Serial.print(pm10); Serial.println(" µg/m³"); delay(1000); }
Задание 2: Измерение уровня CO2 с помощью MH-Z19
cpp#include <SoftwareSerial.h> #include "MHZ19.h" MHZ19 myMHZ19; void setup() { Serial.begin(9600); myMHZ19.begin(); } void loop() { int co2 = myMHZ19.getCO2(); Serial.print("CO2: "); Serial.print(co2); Serial.println(" ppm"); delay(1000); }
Задание 3: Отображение данных на ЖК-дисплее
cpp#include <LiquidCrystal.h> #include <SoftwareSerial.h> #include "SDS011.h" #include "MHZ19.h" SDS011 sds011(2, 3); MHZ19 myMHZ19; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); sds011.begin(); myMHZ19.begin(); } void loop() { float pm25, pm10; sds011.read(&pm25, &pm10); int co2 = myMHZ19.getCO2(); lcd.clear(); lcd.print("PM2.5: "); lcd.print(pm25); lcd.setCursor(0, 1); lcd.print("CO2: "); lcd.print(co2); delay(1000); }
Задание 4: Отправка данных на сервер через WiFi
cpp#include <WiFi.h> #include <SoftwareSerial.h> #include "SDS011.h" #include "MHZ19.h" const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* server = "http://your-server.com/submit"; SDS011 sds011(2, 3); MHZ19 myMHZ19; void setup() { Serial.begin(9600); sds011.begin(); myMHZ19.begin(); WiFi.begin(ssid, password); } void loop() { float pm25, pm10; sds011.read(&pm25, &pm10); int co2 = myMHZ19.getCO2(); if (WiFi.status() == WL_CONNECTED) { WiFiClient client; client.connect(server, 80); client.print("GET /submit?pm25="); client.print(pm25); client.print("&pm10="); client.print(pm10); client.print("&co2="); client.print(co2); client.println(" HTTP/1.1"); } delay(10000); }
Задание 5: Аудиоуведомление при превышении уровня CO2
cpp#include <SoftwareSerial.h> #include "MHZ19.h" #define buzzerPin 9 MHZ19 myMHZ19; void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); myMHZ19.begin(); } void loop() { int co2 = myMHZ19.getCO2(); if (co2 > 1000) { digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 1: Умное устройство для мониторинга качества воздуха в помещении
Создание системы, которая отслеживает качество воздуха и отправляет уведомления на телефон, если уровень загрязняющих веществ превышает допустимые значения.
Задание 2: Система анализа данных о качестве воздуха в реальном времени
Разработка приложения, которое отображает данные о качестве воздуха в реальном времени с использованием графиков и истории изменений.
Задание 1: Измерение давления воды с помощью MPX5010
cpp#define pressurePin A0 void setup() { Serial.begin(9600); } void loop() { int pressureValue = analogRead(pressurePin); float pressure = (pressureValue / 1023.0) * 5.0; // Преобразование в вольты Serial.print("Давление: "); Serial.print(pressure); Serial.println(" V"); delay(1000); }
Задание 2: Измерение глубины воды
cpp#define pressurePin A0 void setup() { Serial.begin(9600); } void loop() { int pressureValue = analogRead(pressurePin); float pressure = (pressureValue / 1023.0) * 5.0; // Преобразование в вольты float depth = pressure / 0.00981; // Преобразование давления в глубину (примерный расчет) Serial.print("Глубина: "); Serial.print(depth); Serial.println(" m"); delay(1000); }
Задание 3: Измерение давления с использованием MS5803
cpp#include <Wire.h> #include "MS5803.h" MS5803 sensor; void setup() { Serial.begin(9600); sensor.begin(); } void loop() { float pressure = sensor.getPressure(); Serial.print("Давление: "); Serial.print(pressure); Serial.println(" mbar"); delay(1000); }
Задание 4: Отображение давления на ЖК-дисплее
cpp#include <LiquidCrystal.h> #include <Wire.h> #include "MS5803.h" MS5803 sensor; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); sensor.begin(); } void loop() { float pressure = sensor.getPressure(); lcd.clear(); lcd.print("Давление: "); lcd.print(pressure); delay(1000); }
Задание 5: Сигнализация при высоком давлении
cpp#include <Wire.h> #include "MS5803.h" #define buzzerPin 9 MS5803 sensor; void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); sensor.begin(); } void loop() { float pressure = sensor.getPressure(); if (pressure > 1500) { // Порог давления digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 1: Система мониторинга уровня воды с использованием датчиков давления
Создание системы, которая отслеживает уровень воды и уведомляет о превышении определенных значений.
Задание 2: Автоматизированная система управления насосами на основе данных о давлении
Разработка системы, которая автоматически управляет насосами на основе данных о давлении воды.
Задание 1: Измерение тока с помощью ACS712
cpp#include <ACS712.h> ACS712 sensor(ACS712_20A, A0); void setup() { Serial.begin(9600); } void loop() { float current = sensor.getCurrentAC(); Serial.print("Ток: "); Serial.print(current); Serial.println(" A"); delay(1000); }
Задание 2: Измерение напряжения с помощью ZMPT101B
cpp#define voltagePin A0 void setup() { Serial.begin(9600); } void loop() { float voltage = analogRead(voltagePin) * (5.0 / 1023.0); // Преобразование в вольты Serial.print("Напряжение: "); Serial.print(voltage); Serial.println(" V"); delay(1000); }
Задание 3: Расчет мощности на основе измерений тока и напряжения
cpp#include <ACS712.h> ACS712 currentSensor(ACS712_20A, A0); #define voltagePin A1 void setup() { Serial.begin(9600); } void loop() { float current = currentSensor.getCurrentAC(); float voltage = analogRead(voltagePin) * (5.0 / 1023.0); float power = voltage * current; Serial.print("Мощность: "); Serial.print(power); Serial.println(" W"); delay(1000); }
Задание 4: Отображение данных на ЖК-дисплее
cpp#include <LiquidCrystal.h> #include <ACS712.h> ACS712 currentSensor(ACS712_20A, A0); #define voltagePin A1 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); } void loop() { float current = currentSensor.getCurrentAC(); float voltage = analogRead(voltagePin) * (5.0 / 1023.0); float power = voltage * current; lcd.clear(); lcd.print("P: "); lcd.print(power); delay(1000); }
Задание 5: Сигнализация при превышении мощности
cpp#include <ACS712.h> #define buzzerPin 9 ACS712 currentSensor(ACS712_20A, A0); #define voltagePin A1 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { float current = currentSensor.getCurrentAC(); float voltage = analogRead(voltagePin) * (5.0 / 1023.0); float power = voltage * current; if (power > 1000) { // Порог мощности digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 1: Умная система управления энергопотреблением
Создание системы, которая отслеживает энергопотребление и управляет электроприборами.
Задание 2: Анализ энергопотребления с использованием данных о токе и напряжении
Разработка приложения для анализа данных о потреблении энергии с графическим интерфейсом.
Задание 1: Измерение расстояния с помощью HC-SR04
cpp#define trigPin 9 #define echoPin 10 void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; // Преобразование в см Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" cm"); delay(1000); }
Задание 2: Измерение расстояния с помощью VL53L0X
cpp#include <Wire.h> #include <VL53L0X.h> VL53L0X sensor; void setup() { Serial.begin(9600); sensor.init(); sensor.setTimeout(500); } void loop() { int distance = sensor.readRangeSingleMillimeters(); Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" mm"); delay(1000); }
Задание 3: Измерение расстояния и отображение данных на ЖК-дисплее
cpp#include <Wire.h> #include <VL53L0X.h> #include <LiquidCrystal.h> VL53L0X sensor; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); sensor.init(); sensor.setTimeout(500); } void loop() { int distance = sensor.readRangeSingleMillimeters(); lcd.clear(); lcd.print("Dist: "); lcd.print(distance); delay(1000); }
Задание 4: Аудиосигнал при приближении объекта
cpp#include <Wire.h> #include <VL53L0X.h> #define buzzerPin 9 VL53L0X sensor; void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); sensor.init(); sensor.setTimeout(500); } void loop() { int distance = sensor.readRangeSingleMillimeters(); if (distance < 200) { // Порог приближения digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 5: Управление светодиодом в зависимости от расстояния
cpp#include <Wire.h> #include <VL53L0X.h> #define ledPin 9 VL53L0X sensor; void setup() { pinMode(ledPin, OUTPUT); sensor.init(); } void loop() { int distance = sensor.readRangeSingleMillimeters(); int brightness = map(distance, 0, 2000, 0, 255); analogWrite(ledPin, brightness); delay(100); }
Задание 1: Робот с системой избегания препятствий
Создание робота, который использует сенсоры для избегания столкновений с объектами.
Задание 2: Умное устройство для мониторинга уровня воды
Разработка системы, которая будет контролировать уровень воды в резервуаре с использованием ультразвукового датчика.
Задание 1: Измерение скорости вращения
cpp#define tachometerPin 2 volatile int count = 0; void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRpm, RISING); } void loop() { count = 0; delay(1000); // Измерение за 1 секунду Serial.print("RPM: "); Serial.println(count * 60); // Умножаем на 60 для получения оборотов в минуту } void countRpm() { count++; }
Задание 2: Отображение скорости вращения на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define tachometerPin 2 volatile int count = 0; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRpm, RISING); } void loop() { count = 0; delay(1000); lcd.clear(); lcd.print("RPM: "); lcd.print(count * 60); } void countRpm() { count++; }
Задание 3: Сигнализация при превышении заданной скорости вращения
cpp#define tachometerPin 2 #define buzzerPin 9 volatile int count = 0; void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRpm, RISING); } void loop() { count = 0; delay(1000); if (count * 60 > 3000) { // Порог скорости digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } } void countRpm() { count++; }
Задание 4: Автоматическое регулирование скорости мотора
cpp#define tachometerPin 2 #define motorPin 9 volatile int count = 0; void setup() { pinMode(motorPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRpm, RISING); } void loop() { count = 0; delay(1000); int speed = map(count * 60, 0, 3000, 0, 255); // Преобразование в PWM analogWrite(motorPin, speed); } void countRpm() { count++; }
Задание 5: Измерение оборотов с использованием нескольких датчиков
cpp#define tachometerPin1 2 #define tachometerPin2 3 volatile int count1 = 0; volatile int count2 = 0; void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(tachometerPin1), countRpm1, RISING); attachInterrupt(digitalPinToInterrupt(tachometerPin2), countRpm2, RISING); } void loop() { count1 = 0; count2 = 0; delay(1000); Serial.print("RPM1: "); Serial.println(count1 * 60); Serial.print("RPM2: "); Serial.println(count2 * 60); } void countRpm1() { count1++; } void countRpm2() { count2++; }
Задание 1: Система управления для автоматического регулирования скорости мотора
Создание системы, которая будет регулировать скорость вращения мотора в зависимости от заданных значений.
Задание 2: Анализ данных о скорости вращения
Разработка приложения для визуализации данных о скорости вращения с графическим интерфейсом.
Задание 1: Веб-приложение для мониторинга данных с сенсоров
Создание простого веб-приложения для отображения данных с различных сенсоров в реальном времени с использованием Node.js и Express.
Задание 2: Мобильное приложение для управления сенсорами
Разработка мобильного приложения, которое позволяет пользователю управлять сенсорами и получать данные с них.
Задание 1: Умная система мониторинга и управления с использованием IoT
Создание системы, которая объединяет различные сенсоры и позволяет пользователю управлять ими через интернет.
Задание 2: Приложение для анализа данных с графиками и визуализацией
Разработка приложения, которое будет собирать данные с сенсоров и визуализировать их с помощью графиков и диаграмм.
Задание 1: Измерение пульса с использованием MAX30100
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); Serial.print("Пульс: "); Serial.print(pox.getHeartRate()); Serial.println(" BPM"); delay(1000); }
Задание 2: Измерение уровня кислорода с использованием MAX30100
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); Serial.print("SPO2: "); Serial.print(pox.getSpO2()); Serial.println(" %"); delay(1000); }
Задание 3: Одновременное отображение пульса и кислорода
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); Serial.print("Пульс: "); Serial.print(pox.getHeartRate()); Serial.print(" BPM, SPO2: "); Serial.print(pox.getSpO2()); Serial.println(" %"); delay(1000); }
Задание 4: Уведомление при низком уровне кислорода
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; #define buzzerPin 9 void setup() { Serial.begin(9600); pox.begin(); pinMode(buzzerPin, OUTPUT); } void loop() { pox.update(); if (pox.getSpO2() < 90) { // Порог кислорода digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 5: Запись данных в SD-карту
cpp#include <Wire.h> #include <SPI.h> #include <SD.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; File dataFile; void setup() { Serial.begin(9600); pox.begin(); if (!SD.begin(4)) { Serial.println("Ошибка инициализации SD-карты!"); return; } } void loop() { pox.update(); dataFile = SD.open("data.txt", FILE_WRITE); if (dataFile) { dataFile.print("Пульс: "); dataFile.print(pox.getHeartRate()); dataFile.print(", SPO2: "); dataFile.println(pox.getSpO2()); dataFile.close(); } delay(1000); }
Задание 1: Создание портативного монитора здоровья
Создание устройства, которое измеряет пульс и уровень кислорода, с отображением результатов на ЖК-дисплее.
Задание 2: Отправка данных на мобильное приложение
Разработка системы, которая отправляет данные о пульсе и кислороде на мобильное приложение через Bluetooth.
Задание 1: Измерение массы с помощью HX711
cpp#include "HX711.h" HX711 scale; void setup() { Serial.begin(9600); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(); scale.tare(); } void loop() { Serial.print("Масса: "); Serial.print(scale.get_units(), 1); Serial.println(" g"); delay(1000); }
Задание 2: Калибровка тензодатчика
cpp#include "HX711.h" HX711 scale; void setup() { Serial.begin(9600); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(2280.f); // Установите значение для калибровки scale.tare(); } void loop() { Serial.print("Масса: "); Serial.print(scale.get_units(), 1); Serial.println(" g"); delay(1000); }
Задание 3: Управление светодиодом в зависимости от веса
cpp#include "HX711.h" HX711 scale; #define ledPin 9 void setup() { Serial.begin(9600); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(); scale.tare(); pinMode(ledPin, OUTPUT); } void loop() { float weight = scale.get_units(); if (weight > 500) { // Порог веса digitalWrite(ledPin, HIGH); // Включить светодиод } else { digitalWrite(ledPin, LOW); // Выключить светодиод } delay(1000); }
Задание 4: Отображение веса на ЖК-дисплее
cpp#include "HX711.h" #include <LiquidCrystal.h> HX711 scale; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Serial.begin(9600); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(); scale.tare(); lcd.begin(16, 2); } void loop() { lcd.clear(); lcd.print("Вес: "); lcd.print(scale.get_units(), 1); lcd.print(" g"); delay(1000); }
Задание 5: Запись данных веса на SD-карту
cpp#include "HX711.h" #include <SD.h> HX711 scale; File dataFile; void setup() { Serial.begin(9600); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(); scale.tare(); if (!SD.begin(4)) { Serial.println("Ошибка инициализации SD-карты!"); } } void loop() { float weight = scale.get_units(); dataFile = SD.open("weight.txt", FILE_WRITE); if (dataFile) { dataFile.println(weight); dataFile.close(); } delay(1000); }
Задание 1: Создание весов с ЖК-дисплеем
Создание весов, отображающих массу на ЖК-дисплее и сигнализирующих о превышении порога.
Задание 2: Умные весы с Bluetooth
Разработка системы, отправляющей данные о массе на мобильное приложение через Bluetooth.
Задание 1: Измерение качества воздуха с использованием SDS011
cpp#include <SoftwareSerial.h> #include "SDS011.h" SoftwareSerial mySerial(10, 11); // RX, TX SDS011 sds(mySerial); void setup() { Serial.begin(9600); mySerial.begin(9600); sds.begin(); } void loop() { float pm25, pm10; sds.read(&pm25, &pm10); Serial.print("PM2.5: "); Serial.print(pm25); Serial.print(" µg/m³, PM10: "); Serial.print(pm10); Serial.println(" µg/m³"); delay(1000); }
Задание 2: Измерение уровня CO2 с использованием MH-Z19
cpp#include <SoftwareSerial.h> #include "MHZ19.h" SoftwareSerial mySerial(10, 11); // RX, TX MHZ19 myMHZ19(mySerial); void setup() { Serial.begin(9600); mySerial.begin(9600); myMHZ19.begin(); } void loop() { int co2 = myMHZ19.getCO2(); Serial.print("CO2: "); Serial.print(co2); Serial.println(" ppm"); delay(1000); }
Задание 3: Одновременное измерение PM2.5 и CO2
cpp#include <SoftwareSerial.h> #include "SDS011.h" #include "MHZ19.h" SoftwareSerial mySerial1(10, 11); // RX, TX для SDS011 SoftwareSerial mySerial2(12, 13); // RX, TX для MH-Z19 SDS011 sds(mySerial1); MHZ19 myMHZ19(mySerial2); void setup() { Serial.begin(9600); mySerial1.begin(9600); mySerial2.begin(9600); sds.begin(); myMHZ19.begin(); } void loop() { float pm25, pm10; sds.read(&pm25, &pm10); int co2 = myMHZ19.getCO2(); Serial.print("PM2.5: "); Serial.print(pm25); Serial.print(" µg/m³, PM10: "); Serial.print(pm10); Serial.print(" µg/m³, CO2: "); Serial.print(co2); Serial.println(" ppm"); delay(1000); }
Задание 4: Визуализация данных на LCD
cpp#include <LiquidCrystal.h> #include <SoftwareSerial.h> #include "SDS011.h" #include "MHZ19.h" SoftwareSerial mySerial1(10, 11); // RX, TX для SDS011 SoftwareSerial mySerial2(12, 13); // RX, TX для MH-Z19 SDS011 sds(mySerial1); MHZ19 myMHZ19(mySerial2); LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { Serial.begin(9600); mySerial1.begin(9600); mySerial2.begin(9600); sds.begin(); myMHZ19.begin(); lcd.begin(16, 2); } void loop() { float pm25, pm10; sds.read(&pm25, &pm10); int co2 = myMHZ19.getCO2(); lcd.clear(); lcd.print("PM2.5: "); lcd.print(pm25); lcd.setCursor(0, 1); lcd.print("CO2: "); lcd.print(co2); delay(1000); }
Задание 5: Уведомление о превышении порога загрязнения
cpp#include <SoftwareSerial.h> #include "SDS011.h" #include "MHZ19.h" SoftwareSerial mySerial1(10, 11); // RX, TX для SDS011 SoftwareSerial mySerial2(12, 13); // RX, TX для MH-Z19 SDS011 sds(mySerial1); MHZ19 myMHZ19(mySerial2); #define buzzerPin 9 void setup() { Serial.begin(9600); mySerial1.begin(9600); mySerial2.begin(9600); sds.begin(); myMHZ19.begin(); pinMode(buzzerPin, OUTPUT); } void loop() { float pm25, pm10; sds.read(&pm25, &pm10); int co2 = myMHZ19.getCO2(); if (pm25 > 35 || co2 > 1000) { // Порог digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 1: Умная система контроля качества воздуха
Создание системы, которая отображает данные о качестве воздуха и отправляет уведомления в случае превышения порога.
Задание 2: Создание веб-приложения для мониторинга качества воздуха
Разработка веб-приложения, которое отображает данные о качестве воздуха с различных датчиков в реальном времени.
Задание 1: Измерение давления с MPX5010
cpp#include <Arduino.h> #define PressureSensorPin A0 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(PressureSensorPin); float pressure = (sensorValue / 1023.0) * 5.0; // Конвертация в вольты Serial.print("Давление: "); Serial.print(pressure); Serial.println(" V"); delay(1000); }
Задание 2: Калибровка и вывод давления в миллибарах
cpp#include <Arduino.h> #define PressureSensorPin A0 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(PressureSensorPin); float pressure = ((sensorValue / 1023.0) * 5.0) * 100; // Конвертация в миллибары Serial.print("Давление: "); Serial.print(pressure); Serial.println(" mbar"); delay(1000); }
Задание 3: Отображение давления на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define PressureSensorPin A0 LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { Serial.begin(9600); lcd.begin(16, 2); } void loop() { int sensorValue = analogRead(PressureSensorPin); float pressure = ((sensorValue / 1023.0) * 5.0) * 100; lcd.clear(); lcd.print("Давление: "); lcd.print(pressure); lcd.print(" mbar"); delay(1000); }
Задание 4: Уведомление о высоком давлении
cpp#include <Arduino.h> #define PressureSensorPin A0 #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { int sensorValue = analogRead(PressureSensorPin); float pressure = ((sensorValue / 1023.0) * 5.0) * 100; if (pressure > 1500) { // Порог давления digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 5: Запись данных о давлении на SD-карту
cpp#include <SD.h> #include <SPI.h> #define PressureSensorPin A0 File dataFile; void setup() { Serial.begin(9600); if (!SD.begin(4)) { Serial.println("Ошибка инициализации SD-карты!"); } } void loop() { int sensorValue = analogRead(PressureSensorPin); float pressure = ((sensorValue / 1023.0) * 5.0) * 100; dataFile = SD.open("pressure.txt", FILE_WRITE); if (dataFile) { dataFile.println(pressure); dataFile.close(); } delay(1000); }
Задание 1: Создание системы мониторинга давления воды
Создание системы, которая отображает давление на ЖК-дисплее и записывает данные на SD-карту.
Задание 2: Умный насос с контролем давления
Разработка системы, контролирующей насос и включающей его при достижении определенного давления.
Задание 1: Измерение тока с использованием ACS712
cpp#include <ACS712.h> ACS712 sensor(ACS712_30A, A0); // Определите модель датчика void setup() { Serial.begin(9600); } void loop() { float current = sensor.getCurrentAC(); // Измерение переменного тока Serial.print("Ток: "); Serial.print(current); Serial.println(" A"); delay(1000); }
Задание 2: Измерение напряжения с ZMPT101B
cpp#define VoltageSensorPin A0 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(VoltageSensorPin); float voltage = (sensorValue / 1023.0) * 5.0; // Конвертация в вольты Serial.print("Напряжение: "); Serial.print(voltage); Serial.println(" V"); delay(1000); }
Задание 3: Вычисление мощности в цепи
cpp#include <ACS712.h> ACS712 currentSensor(ACS712_30A, A0); #define VoltageSensorPin A1 void setup() { Serial.begin(9600); } void loop() { float current = currentSensor.getCurrentAC(); int sensorValue = analogRead(VoltageSensorPin); float voltage = (sensorValue / 1023.0) * 5.0; float power = voltage * current; Serial.print("Мощность: "); Serial.print(power); Serial.println(" W"); delay(1000); }
Задание 4: Уведомление о превышении мощности
cpp#include <ACS712.h> ACS712 currentSensor(ACS712_30A, A0); #define VoltageSensorPin A1 #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { float current = currentSensor.getCurrentAC(); int sensorValue = analogRead(VoltageSensorPin); float voltage = (sensorValue / 1023.0) * 5.0; float power = voltage * current; if (power > 1000) { // Порог мощности digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 5: Запись данных о токе и напряжении на SD-карту
cpp#include <SD.h> #include <SPI.h> #include <ACS712.h> ACS712 currentSensor(ACS712_30A, A0); #define VoltageSensorPin A1 File dataFile; void setup() { Serial.begin(9600); if (!SD.begin(4)) { Serial.println("Ошибка инициализации SD-карты!"); } } void loop() { float current = currentSensor.getCurrentAC(); int sensorValue = analogRead(VoltageSensorPin); float voltage = (sensorValue / 1023.0) * 5.0; dataFile = SD.open("power.txt", FILE_WRITE); if (dataFile) { dataFile.print("Ток: "); dataFile.print(current); dataFile.print(" A, Напряжение: "); dataFile.print(voltage); dataFile.println(" V"); dataFile.close(); } delay(1000); }
Задание 1: Создание системы мониторинга электросети
Создание системы, которая отображает ток, напряжение и мощность на ЖК-дисплее и записывает данные на SD-карту.
Задание 2: Умное управление электросетью
Разработка системы, которая управляет электроприборами в зависимости от потребляемой мощности.
Задание 1: Измерение расстояния с HC-SR04
cpp#define triggerPin 9 #define echoPin 10 void setup() { Serial.begin(9600); pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); long duration = pulseIn(echoPin, HIGH); float distance = duration * 0.034 / 2; // Расчет расстояния в см Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Задание 2: Измерение расстояния с VL53L0X
cpp#include <Wire.h> #include <VL53L0X.h> VL53L0X sensor; void setup() { Serial.begin(9600); Wire.begin(); sensor.init(); sensor.setTimeout(500); } void loop() { float distance = sensor.readRangeSingleMillimeters(); Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" мм"); delay(1000); }
Задание 3: Использование обоих сенсоров для измерения расстояния
cpp#define triggerPin 9 #define echoPin 10 #include <Wire.h> #include <VL53L0X.h> VL53L0X sensor; void setup() { Serial.begin(9600); pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); Wire.begin(); sensor.init(); sensor.setTimeout(500); } void loop() { // HC-SR04 digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); long duration = pulseIn(echoPin, HIGH); float distanceHC = duration * 0.034 / 2; // Расчет расстояния в см // VL53L0X float distanceVL = sensor.readRangeSingleMillimeters(); Serial.print("HC-SR04: "); Serial.print(distanceHC); Serial.print(" см, VL53L0X: "); Serial.print(distanceVL); Serial.println(" мм"); delay(1000); }
Задание 4: Уведомление о препятствии
cpp#define triggerPin 9 #define echoPin 10 #define buzzerPin 8 void setup() { Serial.begin(9600); pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(buzzerPin, OUTPUT); } void loop() { digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); long duration = pulseIn(echoPin, HIGH); float distance = duration * 0.034 / 2; if (distance < 10) { // Порог в 10 см digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 5: Визуализация расстояния на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define triggerPin 9 #define echoPin 10 LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); long duration = pulseIn(echoPin, HIGH); float distance = duration * 0.034 / 2; lcd.clear(); lcd.print("Расстояние: "); lcd.print(distance); lcd.print(" см"); delay(1000); }
Задание 1: Создание системы распознавания объектов
Создание устройства, которое определяет наличие объектов на расстоянии и сигнализирует об этом.
Задание 2: Автономный робот с избеганием препятствий
Разработка автономного робота, который использует сенсоры для избегания препятствий.
Задание 1: Измерение угловой скорости с использованием тахометра
cpp#define tachometerPin 2 volatile int rpmCount = 0; void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRPM, RISING); } void loop() { rpmCount = 0; sei(); // Разрешить прерывания delay(1000); // Счет за 1 секунду cli(); // Запретить прерывания float rpm = (rpmCount * 60); // Перевод в RPM Serial.print("Угловая скорость: "); Serial.print(rpm); Serial.println(" RPM"); } void countRPM() { rpmCount++; }
Задание 2: Вычисление угловой скорости в градусах
cpp#define tachometerPin 2 volatile int tachometerCount = 0; void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(tachometerPin), countTachometer, RISING); } void loop() { tachometerCount = 0; sei(); delay(1000); cli(); float degrees = (tachometerCount * 360); // Перевод в градусы Serial.print("Угловая скорость: "); Serial.print(degrees); Serial.println(" градусы"); } void countTachometer() { tachometerCount++; }
Задание 3: Отображение угловой скорости на ЖК-дисплее
cpp#include <LiquidCrystal.h> #define tachometerPin 2 volatile int rpmCount = 0; LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { Serial.begin(9600); lcd.begin(16, 2); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRPM, RISING); } void loop() { rpmCount = 0; sei(); delay(1000); cli(); float rpm = (rpmCount * 60); lcd.clear(); lcd.print("RPM: "); lcd.print(rpm); delay(1000); } void countRPM() { rpmCount++; }
Задание 4: Уведомление о высокой угловой скорости
cpp#include <LiquidCrystal.h> #define tachometerPin 2 #define buzzerPin 9 volatile int rpmCount = 0; LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode(buzzerPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(tachometerPin), countRPM, RISING); } void loop() { rpmCount = 0; sei(); delay(1000); cli(); float rpm = (rpmCount * 60); lcd.clear(); lcd.print("RPM: "); lcd.print(rpm); if (rpm > 3000) { // Порог угловой скорости digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); } void countRPM() { rpmCount++; }
Задание 5: Запись данных о угловой скорости на SD-карту
cpp#include <SD.h> #include <SPI.h> #define tachometerPin 2 File dataFile; volatile int rpmCount = 0; void setup() { Serial.begin(9600); if (!SD.begin(4)) { Serial.println("Ошибка инициализации SD-карты!"); } attachInterrupt(digitalPinToInterrupt(tachometerPin), countRPM, RISING); } void loop() { rpmCount = 0; sei(); delay(1000); cli(); float rpm = (rpmCount * 60); dataFile = SD.open("rpm.txt", FILE_WRITE); if (dataFile) { dataFile.print("RPM: "); dataFile.println(rpm); dataFile.close(); } delay(1000); } void countRPM() { rpmCount++; }
Задание 1: Создание системы контроля угловой скорости
Создание системы, которая отображает угловую скорость на ЖК-дисплее и записывает данные на SD-карту.
Задание 2: Умное управление моторами по угловой скорости
Разработка системы, которая управляет моторами в зависимости от их угловой скорости.
Задание 1: Измерение температуры и влажности с DHT11
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); Serial.print("Температура: "); Serial.print(temperature); Serial.print(" °C, Влажность: "); Serial.print(humidity); Serial.println(" %"); delay(2000); }
Задание 2: Измерение давления и высоты с BMP180
cpp#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP085_U.h> Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(); void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Ошибка инициализации BMP180!"); while (1); } } void loop() { sensors_event_t event; bmp.getEvent(&event); if (event.pressure) { Serial.print("Давление: "); Serial.print(event.pressure); Serial.println(" hPa"); } delay(2000); }
Задание 3: Вывод температуры и влажности на ЖК-дисплее
cpp#include <DHT.h> #include <LiquidCrystal.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { Serial.begin(9600); dht.begin(); lcd.begin(16, 2); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); lcd.clear(); lcd.print("Temp: "); lcd.print(temperature); lcd.print(" C"); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.print(humidity); lcd.print(" %"); delay(2000); }
Задание 4: Уведомление о высокой температуре
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 #define buzzerPin 9 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); pinMode(buzzerPin, OUTPUT); } void loop() { float temperature = dht.readTemperature(); if (temperature > 30) { // Порог температуры digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(2000); }
Задание 5: Запись данных о температуре и влажности на SD-карту
cpp#include <DHT.h> #include <SD.h> #include <SPI.h> #define DHTPIN 2 #define DHTTYPE DHT11 File dataFile; DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); if (!SD.begin(4)) { Serial.println("Ошибка инициализации SD-карты!"); } } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); dataFile = SD.open("env_data.txt", FILE_WRITE); if (dataFile) { dataFile.print("Temperature: "); dataFile.print(temperature); dataFile.print(" C, Humidity: "); dataFile.print(humidity); dataFile.println(" %"); dataFile.close(); } delay(2000); }
Задание 1: Создание системы мониторинга окружающей среды
Создание системы, которая отображает температуру, влажность и давление на ЖК-дисплее и записывает данные на SD-карту.
Задание 2: Умное управление климатом
Разработка системы, которая управляет обогревателем или вентилятором в зависимости от температуры и влажности.
Задание 1: Измерение качества воздуха с MQ-2
cpp#define MQ2Pin A0 void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(MQ2Pin); Serial.print("Качество воздуха: "); Serial.println(sensorValue); delay(1000); }
Задание 2: Обнаружение движения с PIR
cpp#define PIRPin 2 void setup() { Serial.begin(9600); pinMode(PIRPin, INPUT); } void loop() { int motionDetected = digitalRead(PIRPin); if (motionDetected) { Serial.println("Движение обнаружено!"); } else { Serial.println("Нет движения."); } delay(1000); }
Задание 3: Уведомление о высоком уровне газа с MQ-2
cpp#define MQ2Pin A0 #define buzzerPin 9 void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { int sensorValue = analogRead(MQ2Pin); if (sensorValue > 400) { // Порог газа digitalWrite(buzzerPin, HIGH); // Включить сигнал } else { digitalWrite(buzzerPin, LOW); // Выключить сигнал } delay(1000); }
Задание 4: Включение света при обнаружении движения
cpp#define PIRPin 2 #define lightPin 8 void setup() { Serial.begin(9600); pinMode(PIRPin, INPUT); pinMode(lightPin, OUTPUT); } void loop() { int motionDetected = digitalRead(PIRPin); if (motionDetected) { digitalWrite(lightPin, HIGH); // Включить свет } else { digitalWrite(lightPin, LOW); // Выключить свет } delay(1000); }
Задание 1: Измерение частоты пульса с помощью MAX30100
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" #define REPORTING_PERIOD_MS 1000 PulseOximeter pox; uint32_t tsLastReport = 0; void setup() { Serial.begin(9600); if (!pox.begin()) { Serial.println("Ошибка инициализации MAX30100"); while (1); } pox.setOnBeatDetectedCallback(onBeatDetected); } void loop() { pox.update(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { Serial.print("ЧСС: "); Serial.println(pox.getHeartRate()); tsLastReport = millis(); } } void onBeatDetected() { Serial.println("Пульс обнаружен"); }
Задание 2: Отображение пульса и уровня кислорода на дисплее
cpp#include <Wire.h> #include <LiquidCrystal_I2C.h> #include "MAX30100_PulseOximeter.h" LiquidCrystal_I2C lcd(0x27, 16, 2); PulseOximeter pox; uint32_t tsLastReport = 0; void setup() { Serial.begin(9600); lcd.begin(); if (!pox.begin()) { Serial.println("Ошибка инициализации MAX30100"); while (1); } pox.setOnBeatDetectedCallback(onBeatDetected); } void loop() { pox.update(); if (millis() - tsLastReport > 1000) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("ЧСС: "); lcd.print(pox.getHeartRate()); lcd.setCursor(0, 1); lcd.print("SpO2: "); lcd.print(pox.getSpO2()); tsLastReport = millis(); } } void onBeatDetected() { Serial.println("Пульс обнаружен"); }
Задание 3: Запись пульса на SD-карту
cpp#include <Wire.h> #include <SD.h> #include "MAX30100_PulseOximeter.h" #define CS_PIN 4 PulseOximeter pox; File dataFile; void setup() { Serial.begin(9600); if (!SD.begin(CS_PIN)) { Serial.println("Ошибка SD-карты"); while (1); } if (!pox.begin()) { Serial.println("Ошибка инициализации MAX30100"); while (1); } } void loop() { pox.update(); if (millis() % 1000 == 0) { dataFile = SD.open("pulse_data.txt", FILE_WRITE); if (dataFile) { dataFile.print("ЧСС: "); dataFile.println(pox.getHeartRate()); dataFile.close(); } } }
Задание 4: Уведомление о низком уровне кислорода
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" #define REPORTING_PERIOD_MS 1000 PulseOximeter pox; void setup() { Serial.begin(9600); if (!pox.begin()) { Serial.println("Ошибка инициализации MAX30100"); while (1); } pox.setOnBeatDetectedCallback(onBeatDetected); } void loop() { pox.update(); if (pox.getSpO2() < 90) { Serial.println("Внимание! Низкий уровень кислорода!"); } } void onBeatDetected() { Serial.println("Пульс обнаружен"); }
Задание 5: Подключение к Bluetooth для передачи данных
Используйте модуль HC-05 для передачи данных пульса и уровня кислорода на смартфон по Bluetooth.
Задание 1: Мобильный мониторинг здоровья
Создание системы, передающей данные по Bluetooth для постоянного мониторинга.
Задание 2: Уведомление при низком уровне кислорода и повышенном пульсе
Настройка уведомлений при низких уровнях кислорода или высоких показателях пульса.
Задание 1: Измерение веса с HX711
cpp#include "HX711.h" #define DOUT_PIN 3 #define SCK_PIN 2 HX711 scale; void setup() { Serial.begin(9600); scale.begin(DOUT_PIN, SCK_PIN); scale.set_scale(2280.f); // Калибровка scale.tare(); } void loop() { Serial.print("Вес: "); Serial.println(scale.get_units(), 1); delay(1000); }
Задание 2: Регулировка значения с потенциометром
cpp#define POT_PIN A0 void setup() { Serial.begin(9600); } void loop() { int potValue = analogRead(POT_PIN); Serial.print("Значение: "); Serial.println(potValue); delay(500); }
Задание 3: Включение светодиода в зависимости от массы
cpp#include "HX711.h" #define DOUT_PIN 3 #define SCK_PIN 2 #define LED_PIN 9 HX711 scale; void setup() { Serial.begin(9600); scale.begin(DOUT_PIN, SCK_PIN); pinMode(LED_PIN, OUTPUT); } void loop() { float weight = scale.get_units(); if (weight > 500) { // Порог массы digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } delay(1000); }
Задание 4: Отображение массы на дисплее
Задание 5: Подсчет суммарной массы при добавлении объектов
Задание 1: Контроль наполнения контейнера
Система, контролирующая наполненность контейнера, с уведомлением при достижении веса.
Задание 2: Мониторинг массы на основе времени
Запись изменения веса на SD-карту для отслеживания.
Задание 1: Измерение PM2.5 и PM10 частиц
Используйте библиотеку для SDS011 для измерения уровня частиц.
Задание 2: Измерение CO2 с MH-Z19
Считывание уровня CO2 и отображение на ЖК-дисплее.
Задание 3: Уведомление о высоком уровне CO2
Пример включения звукового сигнала при превышении 1000 ppm CO2.
Задание 1: Мобильное приложение для контроля загрязненности
Отправка данных CO2 и PM по Wi-Fi для мониторинга на смартфоне.
Задание 2: Полный мониторинг качества воздуха
Создание устройства с несколькими сенсорами для мониторинга параметров воздуха.
Задание 1: Измерение давления воды с помощью MPX5010
Использование MPX5010 для мониторинга давления воды и отображения показаний в серийном мониторе.
cpp#define PRESSURE_PIN A0 #define VOLTAGE_AT_ZERO_PRESSURE 0.5 // Напряжение при нулевом давлении для MPX5010 #define MAX_PRESSURE_VOLTAGE 4.5 void setup() { Serial.begin(9600); } void loop() { float voltage = analogRead(PRESSURE_PIN) * (5.0 / 1023.0); float pressure = (voltage - VOLTAGE_AT_ZERO_PRESSURE) * 100 / (MAX_PRESSURE_VOLTAGE - VOLTAGE_AT_ZERO_PRESSURE); Serial.print("Давление: "); Serial.print(pressure); Serial.println(" кПа"); delay(1000); }
Задание 2: Уведомление при высоком давлении
Пример уведомления при превышении определенного уровня давления воды.
Задание 3: Подача сигнала при изменении давления
Настройка для подачи звукового сигнала, когда давление изменяется на заданную величину.
Задание 4: Отображение давления на ЖК-дисплее
Вывод данных давления воды на LCD дисплей.
Задание 5: Калибровка датчика давления
Простая программа для калибровки датчика с сохранением минимального и максимального давления.
Задание 1: Система управления давлением в трубопроводе
Создание системы, которая контролирует давление в трубах и включает реле при превышении допустимого уровня.
Задание 2: Отслеживание изменения давления с записью данных
Запись данных давления на SD-карту для отслеживания изменения уровня давления.
Задание 3: Мобильный мониторинг давления
Отправка данных о давлении через Wi-Fi для дистанционного мониторинга через приложение.
Задание 1: Определение уровня воды с помощью простого датчика уровня
Подключение датчика уровня воды и вывод показаний в серийный монитор.
cpp#define WATER_SENSOR_PIN A0 void setup() { Serial.begin(9600); } void loop() { int waterLevel = analogRead(WATER_SENSOR_PIN); Serial.print("Уровень воды: "); Serial.println(waterLevel); delay(1000); }
Задание 2: Уведомление при низком уровне воды
Настройка для уведомления, когда уровень воды падает ниже заданного уровня.
Задание 3: Управление насосом на основе уровня воды
Включение и выключение насоса в зависимости от уровня воды.
Задание 4: Вывод уровня воды на ЖК-дисплее
Отображение уровня воды на LCD дисплее для удобного мониторинга.
Задание 5: Калибровка датчика уровня воды
Программа для калибровки минимального и максимального значений уровня воды.
Задание 1: Система контроля уровня воды с записью данных
Создание системы, которая записывает уровень воды на SD-карту для дальнейшего анализа.
Задание 2: Дистанционный мониторинг уровня воды
Передача данных о уровне воды по Wi-Fi для мониторинга в приложении.
Задание 3: Автоматическая система полива на основе уровня воды
Система автоматического полива, которая запускается при достижении низкого уровня воды.
Задание 1: Определение прикосновения
Использование сенсора касания для определения нажатия и вывода результата в серийный монитор.
cpp#define TOUCH_SENSOR_PIN 2 void setup() { Serial.begin(9600); pinMode(TOUCH_SENSOR_PIN, INPUT); } void loop() { if (digitalRead(TOUCH_SENSOR_PIN)) { Serial.println("Касание обнаружено"); } delay(500); }
Задание 2: Управление светодиодом при касании
Включение и выключение светодиода в зависимости от состояния сенсора касания.
Задание 3: Уведомление о двойном касании
Программа для обнаружения двойного касания.
Задание 4: Использование сенсора касания в качестве кнопки
Настройка сенсора касания для выполнения действия при нажатии.
Задание 5: Калибровка сенсора касания
Программа для настройки чувствительности сенсора касания.
Задание 1: Создание сенсорного управления с использованием нескольких датчиков
Реализация системы управления, использующей несколько сенсоров для разных действий.
Задание 2: Мониторинг нажатий на сенсор касания с записью данных
Запись количества нажатий на сенсор касания для анализа поведения пользователя.
Задание 3: Сенсорное управление RGB-освещением
Настройка RGB-светодиода для изменения цвета при каждом касании.
Задание 1: Измерение скорости ветра с помощью анемометра
Подключите анемометр, измеряющий скорость ветра в метрах в секунду, и выводите значения в серийный монитор.
cpp#define WIND_SENSOR_PIN 2 volatile int windCount = 0; float windSpeed = 0; void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(WIND_SENSOR_PIN), countWind, RISING); } void loop() { windSpeed = (windCount / 2.0) * 2.4; // Примерная калибровка для преобразования Serial.print("Скорость ветра: "); Serial.print(windSpeed); Serial.println(" м/с"); windCount = 0; delay(1000); } void countWind() { windCount++; }
Задание 2: Вывод скорости ветра на ЖК-дисплей
Отображение значений скорости ветра на LCD дисплее.
Задание 3: Уведомление о сильном ветре
Программа для подачи звукового сигнала при превышении установленного порога скорости ветра.
Задание 4: Сохранение данных скорости ветра на SD-карту
Запись данных скорости ветра на SD-карту для дальнейшего анализа.
Задание 5: Калибровка анемометра
Программа для настройки и калибровки датчика скорости ветра.
Задание 1: Автоматическая система защиты при сильном ветре
Система, которая подает сигнал или включает реле для защиты конструкции при сильном ветре.
Задание 2: Дистанционный мониторинг скорости ветра через Wi-Fi
Передача данных о скорости ветра на сервер для мониторинга в реальном времени через мобильное приложение.
Задание 1: Измерение количества осадков
Подключите датчик дождя и считайте количество осадков, выводя значения в серийный монитор.
cpp#define RAIN_SENSOR_PIN A0 void setup() { Serial.begin(9600); } void loop() { int rainValue = analogRead(RAIN_SENSOR_PIN); float rainfall = rainValue * 0.1; // Коэффициент для преобразования в мм Serial.print("Количество осадков: "); Serial.print(rainfall); Serial.println(" мм"); delay(1000); }
Задание 2: Сигнализация при высоком уровне осадков
Программа для подачи звукового сигнала при достижении определенного уровня осадков.
Задание 3: Сохранение данных осадков на SD-карту
Запись данных уровня осадков на SD-карту для мониторинга в течение длительного периода.
Задание 4: Отображение данных осадков на ЖК-дисплее
Вывод уровня осадков на LCD дисплей для удобного мониторинга.
Задание 5: Калибровка датчика осадков
Программа для настройки и калибровки датчика осадков.
Задание 1: Система управления поливом на основе осадков
Создание системы полива, которая автоматически отключается, если уровень осадков превышает установленный предел.
Задание 2: Дистанционный мониторинг осадков через Wi-Fi
Передача данных о количестве осадков на сервер для мониторинга с использованием мобильного приложения.
Задание 1: Измерение ускорения по оси X, Y, Z
Пример считывания данных акселерометра по трем осям с использованием MPU6050.
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Serial.begin(9600); Wire.begin(); mpu.initialize(); if (!mpu.testConnection()) { Serial.println("Ошибка подключения к MPU6050"); while (1); } } void loop() { int16_t ax, ay, az; mpu.getAcceleration(&ax, &ay, &az); Serial.print("Ускорение X: "); Serial.print(ax); Serial.print(" Y: "); Serial.print(ay); Serial.print(" Z: "); Serial.println(az); delay(1000); }
Задание 2: Измерение углового положения
Использование гироскопа для измерения углового положения устройства.
Задание 3: Поворотный контроль
Программа для обнаружения поворота устройства по определенной оси и подачи сигнала при повороте.
Задание 4: Контроль положения объекта
Настройка для отслеживания наклона устройства в реальном времени.
Задание 5: Калибровка акселерометра и гироскопа
Программа для калибровки и настройки чувствительности MPU6050.
Задание 1: Стабилизация робота с использованием акселерометра и гироскопа
Программа для стабилизации робота, предотвращающая его падение при изменении угла наклона.
Задание 2: Система мониторинга движения с передачей данных
Передача данных о движении и угловом положении на сервер для мониторинга.
Задание 1: Измерение магнитного поля по осям X, Y, Z
Считывание значений магнитного поля с 3-осевого магнитометра.
cpp#include <Wire.h> #include <HMC5883L.h> HMC5883L magnetometer; void setup() { Serial.begin(9600); Wire.begin(); magnetometer.initialize(); if (!magnetometer.testConnection()) { Serial.println("Ошибка подключения к HMC5883L"); while (1); } } void loop() { Vector mag = magnetometer.getHeading(); Serial.print("Магнитное поле X: "); Serial.print(mag.XAxis); Serial.print(" Y: "); Serial.print(mag.YAxis); Serial.print(" Z: "); Serial.println(mag.ZAxis); delay(1000); }
Задание 2: Определение направления с помощью магнитометра
Использование значений осей для определения направления устройства относительно магнитного поля Земли.
Задание 3: Калибровка магнитометра
Программа для калибровки магнитометра, улучшая точность показаний.
Задание 4: Настройка для работы в качестве компаса
Использование магнитометра для реализации функции компаса, показывающего направления.
Задание 5: Измерение магнитного поля от ближайших объектов
Программа для измерения магнитного поля в зависимости от близости к магнитным объектам.
Задание 1: Компас с визуальным отображением направлений
Создание устройства, которое отображает направления (N, S, E, W) на LCD-дисплее.
Задание 2: Система мониторинга геомагнитного поля
Передача данных о магнитном поле на сервер для мониторинга изменений в реальном времени.
Задание 1: Измерение расстояния
Использование ультразвукового сенсора для измерения расстояния до объекта.
cpp#define TRIG_PIN 9 #define ECHO_PIN 10 void setup() { Serial.begin(9600); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); long duration = pulseIn(ECHO_PIN, HIGH); float distance = (duration * 0.034) / 2; Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Задание 2: Уведомление о препятствии
Подать звуковой сигнал, если объект ближе, чем 10 см.
Задание 3: Отображение расстояния на ЖК-дисплее
Вывод измеренного расстояния на LCD-дисплей.
Задание 4: Управление двигателем на основе расстояния
Включение/выключение двигателя в зависимости от расстояния до препятствия.
Задание 5: Автоматическое открытие двери
Открытие двери при обнаружении движения на расстоянии до 1 метра.
Задание 1: Система парковки с измерением расстояния
Создание системы для измерения расстояния до объекта и вывода предупреждения о приближении.
Задание 2: Мобильная система с ультразвуковым датчиком
Использование ультразвукового сенсора для избегания препятствий роботом.
Задание 1: Измерение точного расстояния
Использование лазерного сенсора для измерения расстояния.
cpp#include <Wire.h> #include <VL53L0X.h> VL53L0X sensor; void setup() { Serial.begin(9600); Wire.begin(); sensor.init(); sensor.setTimeout(500); } void loop() { uint16_t distance = sensor.readRangeSingleMillimeters(); Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" мм"); delay(1000); }
Задание 2: Измерение расстояния до движущегося объекта
Мониторинг движущихся объектов с точностью лазера.
Задание 3: Система контроля расстояния на ЖК-дисплее
Вывод значений расстояния на LCD-дисплей для точного контроля.
Задание 1: Лазерная система безопасности
Создание системы безопасности, которая обнаруживает движение с помощью лазера и подает сигнал тревоги.
Задание 1: Измерение скорости вращения
Использование тахометра для измерения скорости вращения двигателя.
cpp#define SENSOR_PIN 2 volatile int pulseCount = 0; unsigned long lastTime = 0; void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, RISING); } void loop() { unsigned long currentTime = millis(); if (currentTime - lastTime >= 1000) { float rpm = pulseCount * 60; // Примерная калибровка для RPM Serial.print("Скорость: "); Serial.print(rpm); Serial.println(" об/мин"); pulseCount = 0; lastTime = currentTime; } } void countPulse() { pulseCount++; }
Задание 1: Управление скоростью двигателя
Использование тахометра для контроля и регулировки скорости вращения двигателя с помощью PID-контроля.
Задание 1: Управление углом сервомотора
Использование потенциометра для управления углом сервомотора.
cpp#include <Servo.h> Servo servo; int potPin = A0; void setup() { servo.attach(9); } void loop() { int val = analogRead(potPin); int angle = map(val, 0, 1023, 0, 180); servo.write(angle); delay(15); }
Задание 1: Управление освещением с помощью реле
Пример использования реле для управления лампой.
cpp#define RELAY_PIN 7 void setup() { pinMode(RELAY_PIN, OUTPUT); } void loop() { digitalWrite(RELAY_PIN, HIGH); // Включить реле delay(1000); digitalWrite(RELAY_PIN, LOW); // Выключить реле delay(1000); }
Задание 1: Измерение влажности почвы
Пример использования датчика влажности почвы.
cpp#define SOIL_PIN A0 void setup() { Serial.begin(9600); } void loop() { int moisture = analogRead(SOIL_PIN); Serial.print("Влажность почвы: "); Serial.println(moisture); delay(1000); }
Задание 1: Измерение уровня pH почвы
Использование pH-датчика для измерения кислотности почвы и вывода значений.
Задание 1: Измерение цветов
Считывание данных с сенсора для определения цветов объектов.
Задание 1: Обнаружение столкновений роботом
Пример использования датчика касания для остановки робота при столкновении.
Задание 1: Чтение RFID метки
Пример использования RFID-датчика для считывания идентификаторов меток.
cpp#include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); } void loop() { if (!rfid.PICC_IsNewCardPresent()) return; if (!rfid.PICC_ReadCardSerial()) return; Serial.print("RFID метка: "); for (byte i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); rfid.PICC_HaltA(); }
Задание 1: Захват изображения
Использование CCD-матрицы для захвата и отображения изображения.
cpp#include <Camera.h> void setup() { Serial.begin(9600); Camera.begin(); } void loop() { Camera.capture(); Serial.println("Изображение захвачено"); delay(5000); // Ждем перед следующей съемкой }
Задание 1: Управление цветами RGB-светодиода
Использование PWM для управления цветами RGB-светодиода.
cpp#define RED_PIN 9 #define GREEN_PIN 10 #define BLUE_PIN 11 void setup() { pinMode(RED_PIN, OUTPUT); pinMode(GREEN_PIN, OUTPUT); pinMode(BLUE_PIN, OUTPUT); } void loop() { // Включаем красный analogWrite(RED_PIN, 255); analogWrite(GREEN_PIN, 0); analogWrite(BLUE_PIN, 0); delay(1000); // Включаем зеленый analogWrite(RED_PIN, 0); analogWrite(GREEN_PIN, 255); analogWrite(BLUE_PIN, 0); delay(1000); // Включаем синий analogWrite(RED_PIN, 0); analogWrite(GREEN_PIN, 0); analogWrite(BLUE_PIN, 255); delay(1000); }
Задание 1: Обнаружение наклона
Использование датчика наклона для определения положения.
cpp#define TILT_PIN 2 void setup() { Serial.begin(9600); pinMode(TILT_PIN, INPUT); } void loop() { int tiltState = digitalRead(TILT_PIN); if (tiltState == HIGH) { Serial.println("Датчик наклона активирован"); } else { Serial.println("Датчик наклона не активирован"); } delay(1000); }
Задание 1: Обнаружение воды
Использование датчика для обнаружения наличия воды в среде.
cpp#define WATER_SENSOR_PIN 3 void setup() { Serial.begin(9600); pinMode(WATER_SENSOR_PIN, INPUT); } void loop() { int waterState = digitalRead(WATER_SENSOR_PIN); if (waterState == HIGH) { Serial.println("Вода обнаружена"); } else { Serial.println("Вода не обнаружена"); } delay(1000); }
Задание 1: Измерение PM2.5 и PM10
Использование сенсора для измерения качества воздуха.
cpp#include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if (mySerial.available()) { int pm25 = mySerial.read(); // Чтение PM2.5 int pm10 = mySerial.read(); // Чтение PM10 Serial.print("PM2.5: "); Serial.print(pm25); Serial.print(" µg/m³, PM10: "); Serial.print(pm10); Serial.println(" µg/m³"); } delay(1000); }
Задание 1: Измерение уровня углекислого газа
Использование сенсора для мониторинга уровня CO2.
cpp#include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if (mySerial.available()) { int co2 = mySerial.read(); // Чтение CO2 Serial.print("Уровень CO2: "); Serial.print(co2); Serial.println(" ppm"); } delay(1000); }
Описание: Использовать сервомотор для управления углом поворота от 0 до 180 градусов.
cpp#include <Servo.h> Servo myServo; // Создаем объект для управления сервомотором void setup() { myServo.attach(9); // Подключаем сервомотор к пину 9 } void loop() { // Поворачиваем сервомотор от 0 до 180 градусов for (int angle = 0; angle <= 180; angle += 1) { myServo.write(angle); // Устанавливаем угол delay(15); // Задержка для плавности движения } // Поворачиваем сервомотор от 180 до 0 градусов for (int angle = 180; angle >= 0; angle -= 1) { myServo.write(angle); delay(15); } }
Описание: Использовать потенциометр для управления углом поворота сервомотора.
cpp#include <Servo.h> Servo myServo; // Создаем объект для управления сервомотором int potPin = A0; // Пин для подключения потенциометра void setup() { myServo.attach(9); // Подключаем сервомотор к пину 9 } void loop() { int potValue = analogRead(potPin); // Читаем значение с потенциометра int angle = map(potValue, 0, 1023, 0, 180); // Преобразуем значение в угол myServo.write(angle); // Устанавливаем угол сервомотора delay(15); // Задержка для плавности движения }
Описание: Использовать последовательный порт для управления углом сервомотора.
cpp#include <Servo.h> Servo myServo; // Создаем объект для управления сервомотором void setup() { myServo.attach(9); // Подключаем сервомотор к пину 9 Serial.begin(9600); // Запускаем последовательный порт } void loop() { if (Serial.available() > 0) { int angle = Serial.parseInt(); // Читаем угол из последовательного порта if (angle >= 0 && angle <= 180) { myServo.write(angle); // Устанавливаем угол } } }
Описание: Серво двигается между 0 и 180 градусами через равные промежутки времени.
cpp#include <Servo.h> Servo myServo; void setup() { myServo.attach(9); // Подключаем сервомотор к пину 9 } void loop() { for (int angle = 0; angle <= 180; angle += 10) { myServo.write(angle); // Поворачиваем сервомотор delay(500); // Задержка между движениями } for (int angle = 180; angle >= 0; angle -= 10) { myServo.write(angle); delay(500); } }
Описание: Использовать сервомотор для открытия и закрытия замка.
cpp#include <Servo.h> Servo lockServo; void setup() { lockServo.attach(9); // Подключаем сервомотор к пину 9 } void loop() { lockServo.write(0); // Закрыть замок delay(2000); // Держим замок закрытым 2 секунды lockServo.write(90); // Открыть замок delay(2000); // Держим замок открытым 2 секунды }
Описание: Использовать гироскоп для управления углом поворота сервомотора.
cpp#include <Servo.h> #include <Wire.h> #include <MPU6050.h> Servo myServo; // Создаем объект для управления сервомотором MPU6050 mpu; void setup() { Serial.begin(9600); myServo.attach(9); // Подключаем сервомотор к пину 9 Wire.begin(); mpu.initialize(); } void loop() { int16_t ax, ay, az; mpu.getAcceleration(&ax, &ay, &az); int angle = map(ax, -17000, 17000, 0, 180); // Преобразуем данные акселерометра в угол myServo.write(angle); // Устанавливаем угол сервомотора delay(100); }
Описание: Сервомотор автоматически наводится на источник звука.
cpp#include <Servo.h> Servo myServo; // Создаем объект для управления сервомотором int micPin = A0; // Пин для подключения микрофона void setup() { myServo.attach(9); // Подключаем сервомотор к пину 9 } void loop() { int soundLevel = analogRead(micPin); // Читаем уровень звука int angle = map(soundLevel, 0, 1023, 0, 180); // Преобразуем уровень звука в угол myServo.write(angle); // Устанавливаем угол сервомотора delay(100); }
Описание: Использование нескольких сервомоторов для управления движением робота.
cpp#include <Servo.h> Servo leftServo; Servo rightServo; void setup() { leftServo.attach(9); // Подключаем левый сервомотор rightServo.attach(10); // Подключаем правый сервомотор } void loop() { leftServo.write(180); // Вперед rightServo.write(0); delay(1000); // Двигаться вперед 1 секунду leftServo.write(0); // Назад rightServo.write(180); delay(1000); // Двигаться назад 1 секунду }
Описание: Использование сервомотора, управляемого через веб-интерфейс.
cpp#include <Servo.h> #include <ESP8266WiFi.h> Servo myServo; void setup() { Serial.begin(115200); myServo.attach(9); // Подключаем сервомотор // Настройка Wi-Fi } void loop() { // Логика для обработки запросов и управления сервомотором }
Описание: Сервомотор следует за движущимися объектами с помощью ультразвукового сенсора.
cpp#include <Servo.h> Servo myServo; #define TRIG_PIN 9 #define ECHO_PIN 10 void setup() { myServo.attach(11); // Подключаем сервомотор pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // Логика для измерения расстояния и поворота сервомотора в зависимости от движения }
Управление LED с кнопкойКогда кнопка нажата, светодиод загорается.
cppconst int ledPin = 13; const int buttonPin = 2; int buttonState = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Мигание светодиодаСветодиод мигает с заданным интервалом времени.
cppconst int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Управление сервомотором кнопкойКогда нажата кнопка, сервомотор поворачивается на 90 градусов.
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; int buttonState = 0; void setup() { myServo.attach(9); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { myServo.write(90); } else { myServo.write(0); } }
Диммер на потенциометреИспользование потенциометра для регулировки яркости светодиода.
cppconst int ledPin = 9; const int potPin = A0; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int potValue = analogRead(potPin); int brightness = map(potValue, 0, 1023, 0, 255); analogWrite(ledPin, brightness); }
Тональность звука с пьезоИзменение тона пьезодинамика в зависимости от положения потенциометра.
cppconst int piezoPin = 8; const int potPin = A0; void setup() {} void loop() { int potValue = analogRead(potPin); int toneValue = map(potValue, 0, 1023, 100, 1000); tone(piezoPin, toneValue); }
Простой таймер с кнопкой и светодиодомКнопка запускает таймер на 5 секунд, по истечении которых загорается светодиод.
cppconst int ledPin = 13; const int buttonPin = 2; int buttonState = 0; unsigned long timerStart; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { timerStart = millis(); while (millis() - timerStart < 5000) {} digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); } }
Управление LED с помощью PIR сенсораLED включается, когда PIR сенсор обнаруживает движение.
cppconst int ledPin = 13; const int pirPin = 2; int pirState = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(pirPin, INPUT); } void loop() { pirState = digitalRead(pirPin); if (pirState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Простая система сигнализацииПьезо издает сигнал, когда PIR сенсор обнаруживает движение.
cppconst int buzzerPin = 8; const int pirPin = 2; int pirState = 0; void setup() { pinMode(buzzerPin, OUTPUT); pinMode(pirPin, INPUT); } void loop() { pirState = digitalRead(pirPin); if (pirState == HIGH) { tone(buzzerPin, 1000); delay(1000); noTone(buzzerPin); } }
Контроль сервомотора с помощью потенциометраПоворачиваем сервомотор в зависимости от позиции потенциометра.
cpp#include <Servo.h> Servo myServo; const int potPin = A0; void setup() { myServo.attach(9); } void loop() { int potValue = analogRead(potPin); int angle = map(potValue, 0, 1023, 0, 180); myServo.write(angle); }
Индикатор уровня звука с пьезо и светодиодомЕсли уровень шума выше определенного порога, включается светодиод.
cppconst int ledPin = 13; const int micPin = A0; int soundLevel; void setup() { pinMode(ledPin, OUTPUT); } void loop() { soundLevel = analogRead(micPin); if (soundLevel > 500) { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); } }
Это пример секундомера, который запускается при нажатии кнопки и отображает время на OLED дисплее.
cpp#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); const int buttonPin = 2; unsigned long startTime; bool running = false; void setup() { pinMode(buttonPin, INPUT_PULLUP); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); } void loop() { if (digitalRead(buttonPin) == LOW) { delay(200); // Anti-bounce delay running = !running; if (running) { startTime = millis(); } } if (running) { unsigned long elapsedTime = millis() - startTime; display.clearDisplay(); display.setCursor(0, 10); display.print(elapsedTime / 1000); // Show seconds display.display(); } }
Когда акселерометр обнаруживает резкое изменение в значении осей, срабатывает звуковой сигнал.
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> Adafruit_MPU6050 mpu; const int buzzerPin = 8; float threshold = 1.5; void setup() { Serial.begin(115200); pinMode(buzzerPin, OUTPUT); if (!mpu.begin()) { Serial.println("MPU6050 не найден"); while (1); } } void loop() { sensors_event_t event; mpu.getAccelerometerSensor()->getEvent(&event); float ax = event.acceleration.x; float ay = event.acceleration.y; float az = event.acceleration.z; if (abs(ax) > threshold || abs(ay) > threshold || abs(az) > threshold) { tone(buzzerPin, 1000); delay(1000); noTone(buzzerPin); } delay(100); }
Изменение каждого из трех цветов RGB-светодиода с помощью трех потенциометров.
cppconst int redPin = 9; const int greenPin = 10; const int bluePin = 11; const int potRed = A0; const int potGreen = A1; const int potBlue = A2; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { int redValue = map(analogRead(potRed), 0, 1023, 0, 255); int greenValue = map(analogRead(potGreen), 0, 1023, 0, 255); int blueValue = map(analogRead(potBlue), 0, 1023, 0, 255); analogWrite(redPin, redValue); analogWrite(greenPin, greenValue); analogWrite(bluePin, blueValue); }
Если объект находится ближе определенного расстояния, светодиод загорается.
cppconst int trigPin = 9; const int echoPin = 10; const int ledPin = 13; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; if (distance < 20) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Когда нажимается кнопка, сервомотор открывает "дверь" на 90 градусов.
cpp#include <Servo.h> Servo servo; const int buttonPin = 2; void setup() { pinMode(buttonPin, INPUT); servo.attach(9); } void loop() { if (digitalRead(buttonPin) == HIGH) { servo.write(90); } else { servo.write(0); } }
Светодиод загорается, если PIR сенсор обнаруживает движение.
cppconst int pirPin = 2; const int ledPin = 13; void setup() { pinMode(pirPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(pirPin) == HIGH) { digitalWrite(ledPin, HIGH); delay(2000); // LED stays on for 2 seconds } else { digitalWrite(ledPin, LOW); } }
RFID-считыватель проверяет, подходит ли карта. Если да, замок (сервопривод) открывается.
cpp#include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RST_PIN 9 #define SS_PIN 10 MFRC522 rfid(SS_PIN, RST_PIN); Servo lockServo; void setup() { SPI.begin(); rfid.PCD_Init(); lockServo.attach(8); lockServo.write(0); // Закрыт } void loop() { if ( !rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial() ) { return; } if (rfid.uid.uidByte[0] == 0xDE && rfid.uid.uidByte[1] == 0xAD) { // Проверка UID карты lockServo.write(90); // Открыть замок delay(5000); lockServo.write(0); // Закрыть замок } rfid.PICC_HaltA(); }
Светодиод мигает чаще при повышенной температуре.
cppconst int tempPin = A0; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int tempValue = analogRead(tempPin); int blinkDelay = map(tempValue, 0, 1023, 1000, 100); digitalWrite(ledPin, HIGH); delay(blinkDelay); digitalWrite(ledPin, LOW); delay(blinkDelay); }
Если температура выше порога, вентилятор включается.
cppconst int tempPin = A0; const int fanPin = 9; int thresholdTemp = 600; void setup() { pinMode(fanPin, OUTPUT); } void loop() { int tempValue = analogRead(tempPin); if (tempValue > thresholdTemp) { digitalWrite(fanPin, HIGH); } else { digitalWrite(fanPin, LOW); } }
Когда уровень воды достигает заданного значения, включается звуковой сигнал.
cppconst int waterSensorPin = A0; const int buzzerPin = 8; int waterLevelThreshold = 600; void setup() { pinMode(buzzerPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterSensorPin); if (waterLevel > waterLevelThreshold) { tone(buzzerPin, 1000); } else { noTone(buzzerPin); } }
Робот с ультразвуковым сенсором движется вперед, и, если он обнаруживает препятствие на расстоянии меньше 15 см, он поворачивает в сторону.
cpp#include <Servo.h> Servo leftServo; Servo rightServo; const int trigPin = 9; const int echoPin = 10; void setup() { leftServo.attach(5); rightServo.attach(6); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long distance = getDistance(); if (distance < 15) { turnRight(); } else { moveForward(); } delay(100); } long getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; } void moveForward() { leftServo.write(180); rightServo.write(0); } void turnRight() { leftServo.write(180); rightServo.write(180); delay(500); }
Освещение включается при низком уровне освещенности, а вентилятор — при повышенной температуре.
cppconst int lightSensorPin = A0; const int tempSensorPin = A1; const int ledPin = 13; const int fanPin = 9; void setup() { pinMode(ledPin, OUTPUT); pinMode(fanPin, OUTPUT); } void loop() { int lightLevel = analogRead(lightSensorPin); int tempValue = analogRead(tempSensorPin); if (lightLevel < 500) { // Если темно digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } if (tempValue > 600) { // Если жарко digitalWrite(fanPin, HIGH); } else { digitalWrite(fanPin, LOW); } delay(100); }
Поливной насос включается, если уровень влажности почвы ниже установленного порога.
cppconst int soilSensorPin = A0; const int pumpPin = 9; int moistureThreshold = 300; void setup() { pinMode(pumpPin, OUTPUT); } void loop() { int moistureLevel = analogRead(soilSensorPin); if (moistureLevel < moistureThreshold) { digitalWrite(pumpPin, HIGH); // Включить насос delay(5000); // Полив в течение 5 секунд digitalWrite(pumpPin, LOW); // Остановить насос } delay(1000); // Пауза между проверками }
Сервопривод контролирует крышку дозатора, открывая ее на определенное время.
cpp#include <Servo.h> Servo servo; const int buttonPin = 2; void setup() { servo.attach(9); pinMode(buttonPin, INPUT_PULLUP); } void loop() { if (digitalRead(buttonPin) == LOW) { servo.write(90); // Открыть delay(2000); servo.write(0); // Закрыть delay(1000); } }
Используя PIR-сенсор для обнаружения движения и светодиоды для сигнализации, система срабатывает, когда сенсор обнаруживает движение.
cppconst int pirPin = 2; const int ledPin = 13; const int buzzerPin = 8; void setup() { pinMode(pirPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(buzzerPin, OUTPUT); } void loop() { if (digitalRead(pirPin) == HIGH) { digitalWrite(ledPin, HIGH); tone(buzzerPin, 1000); delay(5000); digitalWrite(ledPin, LOW); noTone(buzzerPin); } }
С помощью датчика влажности управляется вентилятор. Если уровень влажности превышает порог, вентилятор включается.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); const int fanPin = 9; void setup() { dht.begin(); pinMode(fanPin, OUTPUT); } void loop() { float humidity = dht.readHumidity(); if (humidity > 70) { digitalWrite(fanPin, HIGH); } else { digitalWrite(fanPin, LOW); } delay(1000); }
Светодиод включается при низком уровне освещенности, а при дневном освещении автоматически выключается.
cppconst int lightSensorPin = A0; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int lightLevel = analogRead(lightSensorPin); if (lightLevel < 500) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } delay(500); }
С помощью ультразвукового сенсора измеряется расстояние до ближайшего объекта. Если оно меньше порогового значения, загорается светодиод.
cppconst int trigPin = 9; const int echoPin = 10; const int ledPin = 13; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { long distance = getDistance(); if (distance < 20) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } delay(100); } long getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; }
Если уровень шума превышает заданный порог, информация о нем отображается на OLED дисплее.
cpp#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); const int micPin = A0; int noiseThreshold = 500; void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); } void loop() { int noiseLevel = analogRead(micPin); display.clearDisplay(); if (noiseLevel > noiseThreshold) { display.setCursor(0, 10); display.print("Noise Detected!"); } else { display.setCursor(0, 10); display.print("Quiet"); } display.display(); delay(500); }
Метеостанция, которая собирает и отображает данные о температуре, влажности и давлении.
cpp#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP280.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Adafruit_BMP280 bmp; Adafruit_SSD1306 display(128, 64, &Wire); void setup() { dht.begin(); bmp.begin(0x76); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); } void loop() { float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); float pressure = bmp.readPressure() / 100.0F; display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Temp: "); display.print(temperature); display.println(" C"); display.setCursor(0, 10); display.print("Humidity: "); display.print(humidity); display.println(" %"); display.setCursor(0, 20); display.print("Pressure: "); display.print(pressure); display.println(" hPa"); display.display(); delay(2000); }
Создайте робота, который реагирует на простые команды, такие как "вперёд", "назад", "стоп". Используйте модуль для распознавания звука (например, KY-038) для захвата звуковых сигналов и сервоприводы для движения.
cpp#include <Servo.h> Servo leftServo; Servo rightServo; const int soundPin = A0; int soundThreshold = 600; void setup() { leftServo.attach(5); rightServo.attach(6); pinMode(soundPin, INPUT); Serial.begin(9600); } void loop() { int soundLevel = analogRead(soundPin); if (soundLevel > soundThreshold) { moveForward(); delay(1000); stop(); } else { stop(); } } void moveForward() { leftServo.write(180); rightServo.write(0); } void stop() { leftServo.write(90); rightServo.write(90); }
Используя камеру OV7670 и сервомотор, создайте систему, которая будет обнаруживать объекты и поворачивать камеру к ним. Код для Arduino будет поддерживать вращение камеры.
cpp#include <Servo.h> Servo cameraServo; const int trigPin = 9; const int echoPin = 10; int distance; void setup() { cameraServo.attach(3); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { distance = getDistance(); if (distance < 30) { for (int pos = 0; pos <= 180; pos += 10) { cameraServo.write(pos); delay(100); } } } long getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); return duration * 0.034 / 2; }
Используйте датчик газа MQ-2 для обнаружения утечек газа и светодиод для оповещения. При обнаружении высокой концентрации газа отправьте уведомление на телефон через ESP8266.
cpp#include <ESP8266WiFi.h> const int gasSensorPin = A0; const int ledPin = 13; int gasThreshold = 300; void setup() { pinMode(gasSensorPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); WiFi.begin("SSID", "PASSWORD"); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void loop() { int gasLevel = analogRead(gasSensorPin); if (gasLevel > gasThreshold) { digitalWrite(ledPin, HIGH); sendNotification(); } else { digitalWrite(ledPin, LOW); } delay(1000); } void sendNotification() { // Пример отправки HTTP-запроса на сервер для уведомления }
Создайте робота на базе Arduino, оснащенного датчиками температуры, влажности, CO2 и PM2.5. Робот может передавать собранные данные на смартфон через Bluetooth.
cpp#include <DHT.h> #include <SoftwareSerial.h> DHT dht(2, DHT11); SoftwareSerial BTSerial(10, 11); // RX, TX для Bluetooth void setup() { Serial.begin(9600); BTSerial.begin(9600); dht.begin(); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); BTSerial.print("Temp: "); BTSerial.print(temperature); BTSerial.print("C, Humidity: "); BTSerial.print(humidity); BTSerial.println("%"); delay(2000); }
С использованием датчика акселерометра и сервоприводов создайте робота, который двигается в зависимости от жестов (например, наклонов контроллера).
cpp#include <Servo.h> #include <Wire.h> #include <MPU6050.h> MPU6050 mpu; Servo servo1, servo2; void setup() { Wire.begin(); mpu.initialize(); servo1.attach(9); servo2.attach(10); } void loop() { int16_t ax, ay, az; mpu.getAcceleration(&ax, &ay, &az); if (ax > 10000) { servo1.write(0); // Поворот в одну сторону servo2.write(0); } else if (ax < -10000) { servo1.write(180); // Поворот в другую сторону servo2.write(180); } else { servo1.write(90); servo2.write(90); } delay(500); }
Используя Arduino и TinyML, создайте проект, который различает разные типы звуков и реагирует на них.
К примеру, для этого можно использовать Arduino Nano 33 BLE Sense и обученную модель ML.
Используя MPU6050, отслеживайте изменение положения объекта и отображайте данные на OLED-дисплее.
cpp#include <Wire.h> #include <MPU6050.h> #include <Adafruit_SSD1306.h> MPU6050 mpu; Adafruit_SSD1306 display(128, 32, &Wire); void setup() { Wire.begin(); mpu.initialize(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); } void loop() { int16_t ax, ay, az; mpu.getAcceleration(&ax, &ay, &az); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.print("AX: "); display.print(ax); display.print(" AY: "); display.print(ay); display.display(); delay(500); }
С помощью RFID и OLED-дисплея создайте систему, которая распознает метки RFID и отслеживает количество посетителей.
cpp#include <Wire.h> #include <MFRC522.h> #include <Adafruit_SSD1306.h> MFRC522 mfrc522(10, 9); Adafruit_SSD1306 display(128, 32, &Wire); int count = 0; void setup() { SPI.begin(); mfrc522.PCD_Init(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); } void loop() { if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { count++; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.print("Visitors: "); display.print(count); display.display(); delay(1000); } }
Создайте робота-питомца, который реагирует на прикосновения, звук и движения пользователя. Можете использовать датчик касания, микрофон и сервоприводы для управления движением.
Эта станция включает датчики влажности, температуры и освещения. В зависимости от условий, станция активирует полив или освещение для поддержки роста растения.
cpp#include <DHT.h> #include <Servo.h> DHT dht(2, DHT11); Servo pumpServo; const int lightSensorPin = A0; const int soilSensorPin = A1; int lightThreshold = 500; int moistureThreshold = 300; void setup() { dht.begin(); pumpServo.attach(9); } void loop() { int lightLevel = analogRead(lightSensorPin); int moistureLevel = analogRead(soilSensorPin); float temperature = dht.readTemperature(); if (lightLevel < lightThreshold) { // Включить свет } if (moistureLevel < moistureThreshold) { pumpServo.write(90); delay(5000); pumpServo.write(0); } delay(2000); }
Описание: Подключите потенциометр и сервомотор так, чтобы угол наклона сервомотора изменялся при вращении ручки потенциометра.
Схема подключения:
Код:
cpp#include <Servo.h> // Подключаем библиотеку Servo Servo myServo; // Создаём объект сервомотора int potPin = A0; // Пин, к которому подключён потенциометр int potValue; // Переменная для хранения значения потенциометра int servoAngle; // Переменная для угла сервомотора void setup() { myServo.attach(9); // Подключаем сервомотор к пину 9 } void loop() { potValue = analogRead(potPin); // Считываем значение с потенциометра servoAngle = map(potValue, 0, 1023, 0, 180); // Преобразуем значение в угол от 0 до 180 myServo.write(servoAngle); // Устанавливаем угол сервомотора delay(15); // Задержка для плавного движения }
Описание: Включите светодиод, когда сервопривод достигнет заданного угла, и выключите его при возврате в исходное положение.
Схема подключения:
Код:
cpp#include <Servo.h> // Подключаем библиотеку Servo Servo myServo; int ledPin = 10; // Пин, к которому подключён светодиод int servoAngle = 0; void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(ledPin, OUTPUT); // Настраиваем светодиод как выход } void loop() { myServo.write(90); // Устанавливаем сервомотор на 90 градусов digitalWrite(ledPin, HIGH); // Включаем светодиод delay(1000); // Ждём 1 секунду myServo.write(0); // Возвращаем сервомотор в 0 градусов digitalWrite(ledPin, LOW); // Выключаем светодиод delay(1000); // Ждём 1 секунду }
Описание: Используйте сервомотор для подъема и опускания мини-флажка. Изменяйте положение флажка с интервалом времени.
Схема подключения:
Код:
cpp#include <Servo.h> // Подключаем библиотеку Servo Servo myServo; void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { myServo.write(180); // Поднимаем флажок delay(2000); // Ждем 2 секунды myServo.write(0); // Опускаем флажок delay(2000); // Ждем 2 секунды }
Описание: При нажатии кнопки сервомотор меняет угол наклона, а при повторном нажатии возвращается в исходное положение.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int buttonPin = 2; // Пин для кнопки bool buttonState = false; // Состояние кнопки bool lastButtonState = false; // Предыдущее состояние кнопки void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT_PULLUP); // Настраиваем пин кнопки } void loop() { buttonState = digitalRead(buttonPin); // Читаем состояние кнопки // Проверяем, было ли нажатие if (buttonState == LOW && lastButtonState == HIGH) { static bool servoPos = false; // Переключатель для позиции servoPos = !servoPos; // Меняем позицию if (servoPos) { myServo.write(90); // Устанавливаем на 90 градусов } else { myServo.write(0); // Возвращаем в 0 градусов } delay(200); // Задержка, чтобы избежать дребезга } lastButtonState = buttonState; // Сохраняем предыдущее состояние }
Описание: Используйте сервомотор для управления маленьким вентилятором, включающимся при достижении определенной температуры с датчиком DHT11.
Схема подключения:
Код:
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 7 // Пин для DHT11 #define DHTTYPE DHT11 // Тип DHT DHT dht(DHTPIN, DHTTYPE); Servo myServo; int thresholdTemp = 30; // Пороговая температура void setup() { Serial.begin(9600); dht.begin(); myServo.attach(9); // Подключаем сервомотор } void loop() { float humidity = dht.readHumidity(); // Считываем влажность float temperature = dht.readTemperature(); // Считываем температуру if (temperature > thresholdTemp) { myServo.write(180); // Включаем вентилятор } else { myServo.write(0); // Выключаем вентилятор } delay(2000); // Ждем 2 секунды перед следующим считыванием }
Это первые пять задач. Если вам нужно продолжение, дайте знать, и я продолжу с другими заданиями!
Отлично! Продолжим с шестой по десятую задачи.
Описание: Используйте сервомотор для открытия и закрытия дверцы кормушки по расписанию. Можно добавить RTC (реальное время) для автоматизации.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int feedingTime = 12; // Время кормления в часах (12:00) int feedingDuration = 5000; // Продолжительность кормления в миллисекундах (5 секунд) void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int currentHour = hour(); // Получаем текущий час if (currentHour == feedingTime) { myServo.write(90); // Открываем кормушку delay(feedingDuration); // Кормим в течение 5 секунд myServo.write(0); // Закрываем кормушку delay(3600000); // Ждем 1 час перед следующим кормлением } delay(1000); // Ждем 1 секунду перед следующим циклом }
Описание: Используйте сервомотор для изменения угла наклона светильника, чтобы управлять яркостью, в зависимости от значения с датчика освещенности.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int lightSensorPin = A0; // Пин для датчика света int servoAngle; void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int lightValue = analogRead(lightSensorPin); // Считываем значение с датчика servoAngle = map(lightValue, 0, 1023, 0, 180); // Преобразуем в угол myServo.write(servoAngle); // Устанавливаем угол delay(1000); // Задержка для обновления }
Описание: Используйте инфракрасный приемник для управления сервомотором с пульта дистанционного управления.
Схема подключения:
Код:
cpp#include <Servo.h> #include <IRremote.h> Servo myServo; IRrecv irrecv(11); // Пин для ИК-приемника decode_results results; void setup() { myServo.attach(9); // Подключаем сервомотор irrecv.enableIRIn(); // Включаем ИК-приемник } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0xFFA25D: // Код кнопки "Вверх" (пример) myServo.write(90); // Устанавливаем на 90 градусов break; case 0xFF629D: // Код кнопки "Вниз" (пример) myServo.write(0); // Возвращаем в 0 градусов break; } irrecv.resume(); // Сбрасываем результат } }
Описание: Управляйте замком, открывающимся при считывании RFID-метки.
Схема подключения:
Код:
cpp#include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Создаем объект RFID Servo myServo; void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); myServo.attach(3); // Подключаем сервомотор } void loop() { if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { if (rfid.uid.uidByte[0] == 0xDE && rfid.uid.uidByte[1] == 0xAD) { // Проверяем UID myServo.write(90); // Открываем замок delay(5000); // Открыт 5 секунд myServo.write(0); // Закрываем замок } rfid.PICC_HaltA(); // Останавливаем чтение } }
Описание: Используйте модуль Bluetooth для управления сервомотором с мобильного телефона.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; char command; void setup() { Serial.begin(9600); // Инициализация последовательного порта myServo.attach(9); // Подключаем сервомотор } void loop() { if (Serial.available()) { // Проверяем, есть ли данные command = Serial.read(); // Читаем команду if (command == '1') { myServo.write(90); // Устанавливаем на 90 градусов } else if (command == '0') { myServo.write(0); // Возвращаем в 0 градусов } } }
Описание: Управляйте шторкой, используя сервомотор для открытия и закрытия в зависимости от уровня освещенности.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int lightSensorPin = A0; // Пин для датчика света int servoPosition; void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int lightValue = analogRead(lightSensorPin); // Считываем значение с датчика if (lightValue < 512) { // Если темно myServo.write(90); // Открываем шторки } else { // Если светло myServo.write(0); // Закрываем шторки } delay(1000); // Задержка для обновления }
Описание: Используйте сервомотор для управления наклоном пандуса в зависимости от полученного сигнала от кнопки.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; // Пин для кнопки int buttonState = 0; void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT); // Настраиваем кнопку как вход } void loop() { buttonState = digitalRead(buttonPin); // Читаем состояние кнопки if (buttonState == HIGH) { myServo.write(90); // Поднимаем пандус delay(1000); // Ждем 1 секунду myServo.write(0); // Опускаем пандус } }
Описание: Используйте сервомотор для управления дверью, которую можно открыть и закрыть с помощью кнопок.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int openButtonPin = 2; // Пин для кнопки "Открыть" const int closeButtonPin = 3; // Пин для кнопки "Закрыть" void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(openButtonPin, INPUT); // Настраиваем кнопку как вход pinMode(closeButtonPin, INPUT); // Настраиваем кнопку как вход } void loop() { if (digitalRead(openButtonPin) == HIGH) { myServo.write(90); // Открываем дверь } if (digitalRead(closeButtonPin) == HIGH) { myServo.write(0); // Закрываем дверь } }
Описание: Используйте сервомотор для открывания шкатулки, когда нажимаете на кнопку, и воспроизводите мелодию.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; // Пин для кнопки void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT); // Настраиваем кнопку как вход } void loop() { if (digitalRead(buttonPin) == HIGH) { myServo.write(90); // Открываем шкатулку delay(3000); // Открыто 3 секунды myServo.write(0); // Закрываем шкатулку playMelody(); // Воспроизводим мелодию } } void playMelody() { // Воспроизводим мелодию (пример с использованием функций для динамика) tone(A0, 440, 500); // Пример: нота A delay(500); noTone(A0); }
Описание: Используйте сервомотор для управления клапаном воды в зависимости от уровня влажности почвы.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int soilMoisturePin = A0; // Пин для датчика влажности int moistureLevel; void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { moistureLevel = analogRead(soilMoisturePin); // Читаем уровень влажности if (moistureLevel < 500) { // Если почва сухая myServo.write(90); // Открываем клапан delay(5000); // Поливаем 5 секунд myServo.write(0); // Закрываем клапан } delay(10000); // Ждем 10 секунд перед следующим считыванием }
Описание: Используйте сервомотор для управления заслонкой, которая открывается или закрывается в зависимости от температуры.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int tempSensorPin = A0; // Пин для датчика температуры int temperature; void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { temperature = analogRead(tempSensorPin); // Считываем температуру if (temperature > 512) { // Если температура высокая myServo.write(90); // Открываем заслонку } else { myServo.write(0); // Закрываем заслонку } delay(1000); // Задержка для обновления }
Описание: Используйте сервомотор для управления движением игрушки в зависимости от наклона, определяемого гироскопом.
Схема подключения:
Код:
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 mpu; Servo myServo; void setup() { Wire.begin(); mpu.initialize(); myServo.attach(9); // Подключаем сервомотор } void loop() { int16_t ax, ay, az; mpu.getAcceleration(&ax, &ay, &az); // Получаем данные с гироскопа if (ax > 5000) { myServo.write(90); // Игрушка движется вперед } else if (ax < -5000) { myServo.write(0); // Игрушка движется назад } delay(100); }
Описание: Используйте сервомотор для управления движением в зависимости от сигналов от инфракрасного пульта.
Схема подключения:
Код:
cpp#include <IRremote.h> #include <Servo.h> IRrecv irrecv(2); decode_results results; Servo myServo; void setup() { irrecv.enableIRIn(); // Включаем приемник myServo.attach(9); // Подключаем сервомотор } void loop() { if (irrecv.decode(&results)) { if (results.value == YOUR_OPEN_CODE) { // Код для открытия myServo.write(90); } else if (results.value == YOUR_CLOSE_CODE) { // Код для закрытия myServo.write(0); } irrecv.resume(); // Ждем следующий код } }
Описание: Используйте сервомотор для управления сигнализацией, когда дверь открыта или закрыта.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int doorSensorPin = 2; // Пин для датчика двери void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(doorSensorPin, INPUT); // Настраиваем датчик как вход } void loop() { if (digitalRead(doorSensorPin) == HIGH) { // Дверь открыта myServo.write(90); // Сигнализация включена } else { myServo.write(0); // Сигнализация выключена } }
Описание: Используйте сервомотор для управления движением игрушечного робота.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int forwardButtonPin = 2; // Пин для кнопки "Вперед" const int backwardButtonPin = 3; // Пин для кнопки "Назад" void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(forwardButtonPin, INPUT); // Настраиваем кнопки как входы pinMode(backwardButtonPin, INPUT); } void loop() { if (digitalRead(forwardButtonPin) == HIGH) { myServo.write(90); // Движение вперед } else if (digitalRead(backwardButtonPin) == HIGH) { myServo.write(0); // Движение назад } }
Описание: Используйте сервомотор для подачи корма животному при нажатии на кнопку.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; // Пин для кнопки void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT); // Настраиваем кнопку как вход } void loop() { if (digitalRead(buttonPin) == HIGH) { myServo.write(90); // Подаем корм delay(1000); // Держим открытым 1 секунду myServo.write(0); // Закрываем } }
Описание: Используйте сервомотор для управления подачей воды в фонтан.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int waterLevelPin = A0; // Пин для датчика уровня воды void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int waterLevel = analogRead(waterLevelPin); // Считываем уровень воды if (waterLevel < 500) { // Если уровень низкий myServo.write(90); // Включаем подачу воды } else { myServo.write(0); // Останавливаем подачу воды } delay(1000); }
Описание: Используйте сервомотор для управления вентиляцией в зависимости от температуры.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int tempSensorPin = A0; // Пин для датчика температуры void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int temperature = analogRead(tempSensorPin); // Считываем температуру if (temperature > 512) { // Если температура высокая myServo.write(90); // Открываем вентиляцию } else { myServo.write(0); // Закрываем вентиляцию } delay(1000); }
Описание: Используйте сервомотор для активации сигнализации при обнаружении движения.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int pirPin = 2; // Пин для PIR-сенсора void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(pirPin, INPUT); // Настраиваем PIR-сенсор как вход } void loop() { if (digitalRead(pirPin) == HIGH) { // Если движение обнаружено myServo.write(90); // Активируем сигнализацию delay(5000); // Держим 5 секунд myServo.write(0); // Отключаем сигнализацию } }
Описание: Используйте сервомотор для автоматического полива цветка в зависимости от уровня влажности почвы.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int soilMoisturePin = A0; // Пин для датчика влажности void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int moistureLevel = analogRead(soilMoisturePin); // Считываем уровень влажности if (moistureLevel < 500) { // Если почва сухая myServo.write(90); // Полив delay(3000); // Поливаем 3 секунды myServo.write(0); // Закрываем подачу } delay(60000); // Ждем минуту перед следующим считыванием }
Описание: Используйте сервомотор для открытия/закрытия штор в зависимости от освещения.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; int lightSensorPin = A0; // Пин для датчика света void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { int lightValue = analogRead(lightSensorPin); // Считываем уровень освещения if (lightValue < 512) { // Если темно myServo.write(90); // Открываем шторы } else { myServo.write(0); // Закрываем шторы } delay(1000); }
Описание: Используйте сервомотор для автоматической подачи корма в определенное время.
Схема подключения:
Код:
cpp#include <Servo.h> #include <TimeLib.h> Servo myServo; void setup() { myServo.attach(9); // Подключаем сервомотор } void loop() { if (hour() == 8 && minute() == 0) { // Подаем корм в 8:00 myServo.write(90); // Открываем кормушку delay(5000); // Держим открытой 5 секунд myServo.write(0); // Закрываем } delay(60000); // Проверяем каждую минуту }
Описание: Используйте сервомотор для активации сигнализации при нажатии на кнопку.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; // Пин для кнопки void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT); // Настраиваем кнопку как вход } void loop() { if (digitalRead(buttonPin) == HIGH) { myServo.write(90); // Активируем сигнализацию delay(5000); // Держим 5 секунд myServo.write(0); // Деактивируем } }
Описание: Используйте сервомотор для управления моделью, реагирующей на взаимодействие.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; // Пин для кнопки void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT); // Настраиваем кнопку как вход } void loop() { if (digitalRead(buttonPin) == HIGH) { myServo.write(90); // Модель реагирует на нажатие delay(2000); // Держим 2 секунды myServo.write(0); // Возвращаем в исходное положение } }
Описание: Используйте сервомотор для управления замком, который открывается по сигналу.
Схема подключения:
Код:
cpp#include <Servo.h> Servo myServo; const int buttonPin = 2; // Пин для кнопки void setup() { myServo.attach(9); // Подключаем сервомотор pinMode(buttonPin, INPUT); // Настраиваем кнопку как вход } void loop() { if (digitalRead(buttonPin) == HIGH) { myServo.write(90); // Открываем замок delay(5000); // Держим открытым 5 секунд myServo.write(0); // Закрываем } }
Описание: Часы показывают текущее время и дату на LCD-дисплее.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> #include <LiquidCrystal.h> RTC_DS3231 rtc; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Пины для LCD-дисплея void setup() { lcd.begin(16, 2); rtc.begin(); } void loop() { DateTime now = rtc.now(); lcd.setCursor(0, 0); lcd.print(now.hour(), DEC); lcd.print(":"); lcd.print(now.minute(), DEC); lcd.setCursor(0, 1); lcd.print(now.day(), DEC); lcd.print("/"); lcd.print(now.month(), DEC); lcd.print("/"); lcd.print(now.year(), DEC); delay(1000); }
Описание: Устройство напоминает о времени приема лекарства путем звукового сигнала в определенное время.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> RTC_DS3231 rtc; const int buzzerPin = 8; void setup() { rtc.begin(); pinMode(buzzerPin, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.hour() == 8 && now.minute() == 0) { // Напоминание в 8:00 tone(buzzerPin, 1000); // Включаем звуковой сигнал delay(5000); // 5 секунд noTone(buzzerPin); // Отключаем сигнал } delay(60000); }
Описание: Автоматическое включение света в заданное время, например, в 19:00, и отключение в 6:00.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> RTC_DS3231 rtc; const int relayPin = 7; void setup() { rtc.begin(); pinMode(relayPin, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.hour() >= 19 || now.hour() < 6) { // Включение света digitalWrite(relayPin, HIGH); } else { digitalWrite(relayPin, LOW); // Отключение света } delay(60000); }
Описание: Управляет насосом, включающимся на 15 минут каждый час.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> RTC_DS3231 rtc; const int pumpRelay = 6; void setup() { rtc.begin(); pinMode(pumpRelay, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.minute() < 15) { // Включаем насос в течение первых 15 минут каждого часа digitalWrite(pumpRelay, HIGH); } else { digitalWrite(pumpRelay, LOW); } delay(60000); }
Описание: Секундомер запускается кнопкой и выводит время на LCD.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> #include <LiquidCrystal.h> RTC_DS3231 rtc; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int buttonPin = 9; bool running = false; unsigned long startTime; void setup() { lcd.begin(16, 2); rtc.begin(); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH && !running) { running = true; startTime = millis(); } if (running) { unsigned long elapsed = millis() - startTime; int seconds = elapsed / 1000; lcd.setCursor(0, 0); lcd.print("Sec: "); lcd.print(seconds); } delay(200); }
Описание: Простейший будильник, который активирует звуковой сигнал в установленное время.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> RTC_DS3231 rtc; const int buzzerPin = 8; void setup() { rtc.begin(); pinMode(buzzerPin, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.hour() == 6 && now.minute() == 30) { // Будильник на 6:30 tone(buzzerPin, 1000); // Включаем звуковой сигнал delay(10000); noTone(buzzerPin); } delay(60000); }
Описание: Включает насос на 5 минут каждые 55 минут.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> RTC_DS3231 rtc; const int pumpRelay = 6; void setup() { rtc.begin(); pinMode(pumpRelay, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.minute() < 5) { // Включаем насос на первые 5 минут каждого часа digitalWrite(pumpRelay, HIGH); } else { digitalWrite(pumpRelay, LOW); } delay(60000); }
Описание: Отображает на LCD текущее время и температуру с модуля DS3231.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> #include <LiquidCrystal.h> RTC_DS3231 rtc; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); rtc.begin(); } void loop() { DateTime now = rtc.now(); float temperature = rtc.getTemperature(); lcd.setCursor(0, 0); lcd.print("Time: "); lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); lcd.setCursor(0, 1); lcd.print("Temp: "); lcd.print(temperature); lcd.print(" C"); delay(1000); }
Описание: Вечером дисплей затемняется, а днем становится ярче.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> #include <LiquidCrystal.h> RTC_DS3231 rtc; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int backlightPin = 6; void setup() { lcd.begin(16, 2); rtc.begin(); pinMode(backlightPin, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.hour() >= 20 || now.hour() < 6) { analogWrite(backlightPin, 50); // Ночная яркость } else { analogWrite(backlightPin, 255); // Дневная яркость } delay(60000); }
Описание: Включает вентилятор на 10 минут каждый час.
Схема подключения:
Код:
cpp#include <Wire.h> #include <RTClib.h> RTC_DS3231 rtc; const int fanRelay = 7; void setup() { rtc.begin(); pinMode(fanRelay, OUTPUT); } void loop() { DateTime now = rtc.now(); if (now.minute() < 10) { digitalWrite(fanRelay, HIGH); // Включаем вентилятор на 10 минут } else { digitalWrite(fanRelay, LOW); } delay(60000); }
Описание: Датчик DHT11 измеряет температуру и влажность, выводит данные на OLED дисплей.
cpp#include <Wire.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define DHTPIN 2 #define DHTTYPE DHT11 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); DHT dht(DHTPIN, DHTTYPE); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); dht.begin(); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.print("Temp: "); display.print(temperature); display.println(" C"); display.print("Humidity: "); display.print(humidity); display.println(" %"); display.display(); delay(2000); }
Описание: Секундомер с кнопкой на старт и остановку, показ времени на LCD.
cpp#include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int buttonPin = 8; bool running = false; unsigned long startTime; void setup() { lcd.begin(16, 2); pinMode(buttonPin, INPUT_PULLUP); } void loop() { if (digitalRead(buttonPin) == LOW && !running) { running = true; startTime = millis(); } else if (digitalRead(buttonPin) == LOW && running) { running = false; } lcd.setCursor(0, 0); lcd.print("Time: "); lcd.print((millis() - startTime) / 1000); delay(100); }
Описание: Светодиод RGB изменяет цвет в зависимости от яркости освещения с помощью фоторезистора.
cppconst int photoPin = A0; const int redPin = 9; const int greenPin = 10; const int bluePin = 11; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { int lightLevel = analogRead(photoPin); int red = map(lightLevel, 0, 1023, 0, 255); int green = map(lightLevel, 0, 1023, 255, 0); int blue = map(lightLevel, 0, 1023, 128, 255); analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); delay(100); }
Описание: Устройство с PIR-сенсором, включающее сирену при обнаружении движения.
cppconst int pirPin = 2; const int buzzerPin = 9; void setup() { pinMode(pirPin, INPUT); pinMode(buzzerPin, OUTPUT); } void loop() { if (digitalRead(pirPin) == HIGH) { tone(buzzerPin, 1000); // Включаем сирену delay(1000); noTone(buzzerPin); // Выключаем сирену } delay(500); }
Описание: Управление цветами RGB-светодиодов через смартфон, подключенный по Bluetooth.
cpp#include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX, TX const int redPin = 9; const int greenPin = 10; const int bluePin = 11; void setup() { BTSerial.begin(9600); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { if (BTSerial.available()) { char color = BTSerial.read(); if (color == 'R') { analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 0); } else if (color == 'G') { analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 0); } else if (color == 'B') { analogWrite(redPin, 0); analogWrite(greenPin, 0); analogWrite(bluePin, 255); } } }
Описание: Датчик движения (PIR) включает светодиод, если обнаружено движение.
cppconst int pirPin = 2; // Пин для подключения PIR сенсора const int ledPin = 13; // Пин для подключения светодиода void setup() { pinMode(pirPin, INPUT); // PIR сенсор как вход pinMode(ledPin, OUTPUT); // Светодиод как выход } void loop() { int motionDetected = digitalRead(pirPin); // Чтение данных с PIR if (motionDetected == HIGH) { digitalWrite(ledPin, HIGH); // Включаем светодиод delay(1000); // Задержка для визуального эффекта } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } }
Описание: Уровень освещения контролируется фоторезистором, светодиод меняет цвет в зависимости от светового потока.
cppconst int photoPin = A0; // Пин для фоторезистора const int redPin = 9; // Пин для красного цвета RGB const int greenPin = 10; // Пин для зеленого цвета RGB const int bluePin = 11; // Пин для синего цвета RGB void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { int lightLevel = analogRead(photoPin); int red = map(lightLevel, 0, 1023, 255, 0); // Чем ярче свет, тем меньше красного int green = map(lightLevel, 0, 1023, 0, 255); // Чем ярче свет, тем больше зеленого int blue = map(lightLevel, 0, 1023, 0, 128); // Синий для уравновешивания analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); delay(100); }
Описание: Микрофон реагирует на громкий звук, зажигая светодиод.
cppconst int micPin = A0; // Пин для микрофона const int ledPin = 13; // Пин для светодиода void setup() { pinMode(ledPin, OUTPUT); } void loop() { int soundLevel = analogRead(micPin); // Чтение уровня звука if (soundLevel > 512) { // Порог для срабатывания digitalWrite(ledPin, HIGH); // Включаем светодиод delay(500); digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(100); }
Описание: Если температура превышает порог, включается реле.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 #define relayPin 8 DHT dht(DHTPIN, DHTTYPE); void setup() { dht.begin(); pinMode(relayPin, OUTPUT); } void loop() { float temp = dht.readTemperature(); if (temp > 25) { digitalWrite(relayPin, HIGH); // Включаем реле при температуре > 25°C } else { digitalWrite(relayPin, LOW); // Выключаем реле } delay(2000); }
Описание: Светодиод загорается при низком уровне освещения.
cppconst int lightSensor = A0; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int lightLevel = analogRead(lightSensor); if (lightLevel < 300) { // Пороговая величина для срабатывания digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(100); }
Описание: Светодиод мигает, если расстояние меньше 20 см.
cppconst int trigPin = 9; const int echoPin = 10; const int ledPin = 13; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); int distance = duration * 0.034 / 2; if (distance < 20) { digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(100); }
Описание: При низкой влажности почвы включается насос (через реле).
cppconst int soilSensorPin = A0; const int relayPin = 8; void setup() { pinMode(relayPin, OUTPUT); } void loop() { int soilMoisture = analogRead(soilSensorPin); if (soilMoisture < 400) { digitalWrite(relayPin, HIGH); // Включаем реле (подача воды) } else { digitalWrite(relayPin, LOW); // Выключаем реле } delay(1000); }
Описание: Если уровень CO2 превышает порог, включается сирена.
cppconst int co2Pin = A0; const int buzzerPin = 8; void setup() { pinMode(buzzerPin, OUTPUT); } void loop() { int co2Level = analogRead(co2Pin); if (co2Level > 600) { // Пороговое значение tone(buzzerPin, 1000); // Включаем сирену } else { noTone(buzzerPin); // Выключаем сирену } delay(500); }
Описание: Светодиод мигает быстрее при высоком уровне шума.
cppconst int micPin = A0; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int soundLevel = analogRead(micPin); int blinkDelay = map(soundLevel, 0, 1023, 500, 50); digitalWrite(ledPin, HIGH); delay(blinkDelay); digitalWrite(ledPin, LOW); delay(blinkDelay); }
Описание: Светодиод включается при низком уровне воды (симуляция датчика уровня воды).
cppconst int waterLevelPin = A0; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterLevelPin); if (waterLevel < 300) { // Порог для срабатывания digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(100); }
Описание: Кнопка запускает/останавливает секундомер, а значение отображается на дисплее.
cpp#include <LiquidCrystal.h> const int buttonPin = 2; const int lcdRs = 7, lcdEn = 8, lcdD4 = 9, lcdD5 = 10, lcdD6 = 11, lcdD7 = 12; LiquidCrystal lcd(lcdRs, lcdEn, lcdD4, lcdD5, lcdD6, lcdD7); bool running = false; unsigned long startTime = 0; unsigned long elapsedTime = 0; void setup() { pinMode(buttonPin, INPUT_PULLUP); lcd.begin(16, 2); lcd.print("Time: 0 s"); } void loop() { if (digitalRead(buttonPin) == LOW) { delay(200); running = !running; if (running) { startTime = millis() - elapsedTime; } } if (running) { elapsedTime = millis() - startTime; lcd.setCursor(6, 0); lcd.print(elapsedTime / 1000); // Отображение секунд } }
Описание: Сирена включается, если датчик обнаруживает быстрое изменение положения.
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> Adafruit_MPU6050 mpu; const int buzzerPin = 9; void setup() { Serial.begin(115200); mpu.begin(); pinMode(buzzerPin, OUTPUT); } void loop() { sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); if (abs(a.acceleration.z) > 10) { // Порог чувствительности падения tone(buzzerPin, 1000); // Включаем сирену } else { noTone(buzzerPin); // Выключаем сирену } delay(100); }
Описание: Каждый потенциометр управляет яркостью отдельного цвета в RGB светодиоде.
cppconst int redPin = 9; const int greenPin = 10; const int bluePin = 11; const int potRed = A0; const int potGreen = A1; const int potBlue = A2; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { int redValue = analogRead(potRed) / 4; int greenValue = analogRead(potGreen) / 4; int blueValue = analogRead(potBlue) / 4; analogWrite(redPin, redValue); analogWrite(greenPin, greenValue); analogWrite(bluePin, blueValue); delay(50); }
Описание: Светодиод включается, если объект приближается ближе 10 см.
cppconst int trigPin = 9; const int echoPin = 10; const int ledPin = 13; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); int distance = duration * 0.034 / 2; if (distance < 10) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } delay(100); }
Описание: Сервопривод поворачивается на 90°, открывая дверь, при нажатии кнопки.
cpp#include <Servo.h> Servo doorServo; const int buttonPin = 2; void setup() { doorServo.attach(9); pinMode(buttonPin, INPUT_PULLUP); } void loop() { if (digitalRead(buttonPin) == LOW) { doorServo.write(90); // Открытие двери delay(1000); doorServo.write(0); // Закрытие двери delay(1000); } }
Описание: Когда PIR-сенсор обнаруживает движение, включается светодиод.
cppconst int pirPin = 2; const int ledPin = 13; void setup() { pinMode(pirPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(pirPin) == HIGH) { digitalWrite(ledPin, HIGH); delay(2000); // Свет горит 2 секунды digitalWrite(ledPin, LOW); } }
Описание: При успешном считывании метки RFID сервомотор открывает замок.
cpp#include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); Servo lockServo; void setup() { SPI.begin(); mfrc522.PCD_Init(); lockServo.attach(8); lockServo.write(0); // Замок закрыт } void loop() { if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) { return; } lockServo.write(90); // Открытие замка delay(3000); lockServo.write(0); // Закрытие замка }
Описание: Светодиод включается, если температура ниже заданного порога.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); const int ledPin = 13; void setup() { dht.begin(); pinMode(ledPin, OUTPUT); } void loop() { float temp = dht.readTemperature(); if (temp < 18) { digitalWrite(ledPin, HIGH); // Низкая температура } else { digitalWrite(ledPin, LOW); } delay(1000); }
Описание: Вентилятор включается, если температура поднимается выше 25°C.
cppconst int tempPin = A0; const int fanPin = 9; void setup() { pinMode(fanPin, OUTPUT); } void loop() { int tempReading = analogRead(tempPin); float tempC = (tempReading / 1024.0) * 5.0 * 100.0; if (tempC > 25) { digitalWrite(fanPin, HIGH); // Включение вентилятора } else { digitalWrite(fanPin, LOW); // Выключение вентилятора } delay(500); }
Описание: Пьезоизлучатель включается, если уровень воды становится низким.
cppconst int waterLevelPin = A0; const int buzzerPin = 8; void setup() { pinMode(buzzerPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterLevelPin); if (waterLevel < 300) { // Порог tone(buzzerPin, 1000); // Включение звука } else { noTone(buzzerPin); // Выключение звука } delay(1000); }
Описание: Робот движется вперед, пока не обнаружит препятствие с помощью ультразвукового датчика, после чего поворачивает.
cpp#include <Servo.h> Servo leftMotor; Servo rightMotor; const int trigPin = 9; const int echoPin = 10; void setup() { leftMotor.attach(5); // Левый мотор rightMotor.attach(6); // Правый мотор pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration * 0.034) / 2; if (distance < 15) { // Если есть препятствие на расстоянии менее 15 см leftMotor.write(180); // Поворот влево rightMotor.write(0); delay(500); } else { leftMotor.write(0); // Движение вперед rightMotor.write(0); } delay(100); }
Описание: Управление освещением и вентилятором в зависимости от уровня освещенности и температуры.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); const int lightSensorPin = A0; const int ledPin = 9; // Светодиод const int fanPin = 10; // Вентилятор void setup() { dht.begin(); pinMode(ledPin, OUTPUT); pinMode(fanPin, OUTPUT); } void loop() { int lightLevel = analogRead(lightSensorPin); float temp = dht.readTemperature(); if (lightLevel < 300) { // Низкий уровень света digitalWrite(ledPin, HIGH); // Включаем свет } else { digitalWrite(ledPin, LOW); // Выключаем свет } if (temp > 25) { // Высокая температура digitalWrite(fanPin, HIGH); // Включаем вентилятор } else { digitalWrite(fanPin, LOW); // Выключаем вентилятор } delay(1000); }
Описание: Полив растений при низком уровне влажности.
cppconst int moistureSensorPin = A0; // Датчик влажности const int pumpPin = 9; // Помпа void setup() { pinMode(pumpPin, OUTPUT); } void loop() { int moistureLevel = analogRead(moistureSensorPin); if (moistureLevel < 300) { // Если влажность ниже порога digitalWrite(pumpPin, HIGH); // Включаем помпу delay(5000); // Поливаем 5 секунд digitalWrite(pumpPin, LOW); // Выключаем помпу } delay(10000); // Проверка каждые 10 секунд }
Описание: Дозатор управляет количеством жидкости, открывая клапан на 1 секунду при нажатии кнопки.
cpp#include <Servo.h> Servo valveServo; const int buttonPin = 2; void setup() { valveServo.attach(9); pinMode(buttonPin, INPUT_PULLUP); } void loop() { if (digitalRead(buttonPin) == LOW) { // Если кнопка нажата valveServo.write(90); // Открываем клапан delay(1000); // Дозируем 1 секунду valveServo.write(0); // Закрываем клапан delay(1000); // Ждем перед следующей дозировкой } }
Описание: Если PIR или магнитный датчик срабатывает, включается сигнализация.
cppconst int pirPin = 2; const int magneticPin = 3; const int buzzerPin = 9; void setup() { pinMode(pirPin, INPUT); pinMode(magneticPin, INPUT); pinMode(buzzerPin, OUTPUT); } void loop() { if (digitalRead(pirPin) == HIGH || digitalRead(magneticPin) == LOW) { tone(buzzerPin, 1000); // Включаем сигнализацию delay(1000); } else { noTone(buzzerPin); // Выключаем сигнализацию } }
Описание: Вентилятор включается, если влажность воздуха превышает 70%.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); const int fanPin = 9; void setup() { dht.begin(); pinMode(fanPin, OUTPUT); } void loop() { float humidity = dht.readHumidity(); if (humidity > 70) { // Высокая влажность digitalWrite(fanPin, HIGH); // Включаем вентилятор } else { digitalWrite(fanPin, LOW); // Выключаем вентилятор } delay(1000); }
Описание: Включение светодиода при низком уровне освещенности.
cppconst int lightSensorPin = A0; const int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int lightLevel = analogRead(lightSensorPin); if (lightLevel < 300) { // Низкий уровень света digitalWrite(ledPin, HIGH); // Включаем свет } else { digitalWrite(ledPin, LOW); // Выключаем свет } delay(1000); }
Описание: Система включает светодиод, если расстояние до препятствия менее 20 см.
cppconst int trigPin = 9; const int echoPin = 10; const int ledPin = 13; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); int distance = duration * 0.034 / 2; if (distance < 20) { // Если расстояние меньше 20 см digitalWrite(ledPin, HIGH); // Включаем индикатор } else { digitalWrite(ledPin, LOW); // Выключаем индикатор } delay(100); }
Описание: Уровень звука отображается на LCD-дисплее.
cpp#include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11, 12); const int micPin = A0; void setup() { lcd.begin(16, 2); } void loop() { int soundLevel = analogRead(micPin); lcd.setCursor(0, 0); lcd.print("Sound Level:"); lcd.setCursor(0, 1); lcd.print(soundLevel); delay(500); }
Описание: Метеостанция, показывающая температуру и влажность на дисплее.
cpp#include <DHT.h> #include <LiquidCrystal.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() { dht.begin(); lcd.begin(16, 2); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(temperature); lcd.print(" C"); lcd.setCursor(0, 1); lcd.print("Hum: "); lcd.print(humidity); lcd.print(" %"); delay(2000); }
Описание: Робот реагирует на звуковые команды, используя микрофон и сервомоторы для движения.
cpp#include <Servo.h> Servo leftMotor; Servo rightMotor; const int micPin = A0; void setup() { leftMotor.attach(5); rightMotor.attach(6); Serial.begin(9600); } void loop() { int soundLevel = analogRead(micPin); if (soundLevel > 600) { // Если звук превышает порог leftMotor.write(0); // Вперед rightMotor.write(0); } else { leftMotor.write(180); // Назад rightMotor.write(180); } delay(100); }
Описание: Система обнаруживает объекты и поворачивает сервомотор для их отслеживания.
cpp#include <Servo.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_VCNL4010.h> Servo trackingServo; Adafruit_VCNL4010 vcnl; void setup() { trackingServo.attach(9); Serial.begin(9600); if (!vcnl.begin()) { Serial.println("VCNL4010 not found"); while (1); } } void loop() { uint16_t proximity = vcnl.readProximity(); if (proximity > 300) { // Если объект близко trackingServo.write(90); // Поворачиваем на 90 градусов } else { trackingServo.write(0); // Возвращаем в начальное положение } delay(500); }
Описание: Сигнализация с использованием газового датчика и светодиода.
cppconst int gasSensorPin = A0; // Датчик газа const int ledPin = 9; // Светодиод const int buzzerPin = 10; // Зуммер void setup() { pinMode(ledPin, OUTPUT); pinMode(buzzerPin, OUTPUT); } void loop() { int gasLevel = analogRead(gasSensorPin); if (gasLevel > 300) { // Если уровень газа высок digitalWrite(ledPin, HIGH); // Включаем светодиод tone(buzzerPin, 1000); // Включаем зуммер } else { digitalWrite(ledPin, LOW); // Выключаем светодиод noTone(buzzerPin); // Выключаем зуммер } delay(1000); }
Описание: Робот с датчиком температуры и влажности, который перемещается по комнате и отображает данные.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo leftMotor; Servo rightMotor; void setup() { dht.begin(); leftMotor.attach(5); rightMotor.attach(6); Serial.begin(9600); } void loop() { float temp = dht.readTemperature(); float humidity = dht.readHumidity(); Serial.print("Temperature: "); Serial.print(temp); Serial.print(" C, Humidity: "); Serial.print(humidity); Serial.println(" %"); // Движение вперед leftMotor.write(0); rightMotor.write(0); delay(1000); // Поворот leftMotor.write(180); rightMotor.write(0); delay(500); }
Описание: Робот, который управляется жестами с помощью акселерометра.
cpp#include <Servo.h> #include <Wire.h> #include <Adafruit_MPU6050.h> Adafruit_MPU6050 mpu; Servo leftMotor; Servo rightMotor; void setup() { Serial.begin(115200); mpu.begin(); leftMotor.attach(5); rightMotor.attach(6); } void loop() { mpu.read(); if (mpu.getYAccel() > 1000) { // Движение вперед leftMotor.write(0); rightMotor.write(0); } else { leftMotor.write(180); // Назад rightMotor.write(180); } delay(100); }
Описание: Использует простую модель для распознавания звуковых команд и управления устройствами.
cpp#include <ArduinoSound.h> const int micPin = A0; void setup() { Serial.begin(9600); } void loop() { int soundLevel = analogRead(micPin); Serial.print("Sound Level: "); Serial.println(soundLevel); // Логика распознавания звуковых команд будет добавлена здесь // Например: если soundLevel превышает порог, выполняем действие delay(500); }
Описание: Датчик отслеживает движения и управляет сервомоторами в зависимости от направления.
cpp#include <Wire.h> #include <Adafruit_MPU6050.h> #include <Servo.h> Adafruit_MPU6050 mpu; Servo motor; void setup() { Serial.begin(115200); mpu.begin(); motor.attach(9); } void loop() { mpu.read(); if (mpu.getYAccel() > 1000) { motor.write(0); // Движение вперед } else { motor.write(180); // Движение назад } delay(100); }
Описание: Система учитывает входящих посетителей и отображает их количество на LCD-дисплее.
cpp#include <LiquidCrystal.h> #include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 // Резет #define SS_PIN 10 // Чтение MFRC522 rfid(SS_PIN, RST_PIN); // Создание экземпляра RFID LiquidCrystal lcd(7, 8, 9, 10, 11, 12); int visitorCount = 0; void setup() { Serial.begin(9600); lcd.begin(16, 2); SPI.begin(); rfid.PCD_Init(); lcd.print("Visitors: 0"); } void loop() { if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { visitorCount++; lcd.clear(); lcd.print("Visitors: "); lcd.print(visitorCount); delay(1000); } }
Описание: Интерактивная игрушка, которая реагирует на движения и звуки.
cpp#include <Servo.h> Servo petServo; const int micPin = A0; void setup() { petServo.attach(9); Serial.begin(9600); } void loop() { int soundLevel = analogRead(micPin); if (soundLevel > 600) { // Если звук превышает порог petServo.write(90); // Поворачиваем игрушку } else { petServo.write(0); // Возвращаем в исходное положение } delay(100); }
Описание: Система, которая поливает растения и контролирует их состояние.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo valveServo; const int moistureSensorPin = A0; void setup() { dht.begin(); valveServo.attach(9); pinMode(moistureSensorPin, INPUT); } void loop() { int moistureLevel = analogRead(moistureSensorPin); float humidity = dht.readHumidity(); if (moistureLevel < 300) { // Если влажность ниже порога valveServo.write(90); // Открываем клапан delay(5000); // Поливаем 5 секунд valveServo.write(0); // Закрываем клапан } delay(60000); // Проверяем каждые 60 секунд }
Описание: Кормушка, которая автоматически подает корм в заданное время.
cpp#include <Servo.h> #include <RTClib.h> Servo feederServo; RTC_DS1307 rtc; void setup() { feederServo.attach(9); Serial.begin(9600); rtc.begin(); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Установка времени компиляции } void loop() { DateTime now = rtc.now(); if (now.hour() == 8 && now.minute() == 0) { // Кормление в 8:00 feederServo.write(90); // Открываем кормушку delay(5000); // Кормим 5 секунд feederServo.write(0); // Закрываем кормушку delay(60000); // Ждем 1 минуту, чтобы избежать повторного кормления } delay(1000); }
Описание: Будильник, который открывает заслонку, когда приходит время будильника.
cpp#include <Servo.h> #include <RTClib.h> Servo alarmServo; RTC_DS1307 rtc; void setup() { alarmServo.attach(9); Serial.begin(9600); rtc.begin(); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } void loop() { DateTime now = rtc.now(); if (now.hour() == 7 && now.minute() == 0) { // Будильник на 7:00 alarmServo.write(90); // Открываем заслонку delay(5000); // Открыто 5 секунд alarmServo.write(0); // Закрываем delay(60000); // Ждем минуту } delay(1000); }
Описание: Система контроля уровня воды, которая открывает или закрывает клапан в зависимости от уровня воды.
cpp#include <Servo.h> Servo valveServo; const int waterLevelPin = A0; // Датчик уровня воды void setup() { valveServo.attach(9); pinMode(waterLevelPin, INPUT); } void loop() { int waterLevel = analogRead(waterLevelPin); if (waterLevel < 300) { // Уровень воды низкий valveServo.write(90); // Открываем клапан } else { valveServo.write(0); // Закрываем клапан } delay(1000); }
Описание: Система, которая поливает растения, когда уровень влажности почвы ниже заданного значения.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo waterPumpServo; const int moistureSensorPin = A0; void setup() { dht.begin(); waterPumpServo.attach(9); pinMode(moistureSensorPin, INPUT); } void loop() { int moistureLevel = analogRead(moistureSensorPin); if (moistureLevel < 300) { // Если влажность низкая waterPumpServo.write(90); // Включаем насос delay(5000); // Полив 5 секунд waterPumpServo.write(0); // Отключаем насос } delay(60000); // Проверяем каждую минуту }
Описание: Система, которая поворачивает камеру при обнаружении движения.
cpp#include <Servo.h> #include <Wire.h> #include <Adafruit_MPU6050.h> Adafruit_MPU6050 mpu; Servo cameraServo; void setup() { Serial.begin(115200); mpu.begin(); cameraServo.attach(9); } void loop() { mpu.read(); if (mpu.getYAccel() > 1000) { // Если движение обнаружено cameraServo.write(90); // Поворачиваем камеру delay(1000); cameraServo.write(0); // Возвращаем обратно } delay(100); }
Описание: Замок, который открывается при считывании RFID-метки.
cpp#include <Servo.h> #include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 // Резет #define SS_PIN 10 // Чтение MFRC522 rfid(SS_PIN, RST_PIN); // Создание экземпляра RFID Servo doorLockServo; void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); doorLockServo.attach(6); } void loop() { if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { Serial.println("Door opened"); doorLockServo.write(90); // Открываем замок delay(5000); // Держим открытым 5 секунд doorLockServo.write(0); // Закрываем замок } }
Описание: Управление яркостью LED, используя сервомотор и потенциометр.
cpp#include <Servo.h> Servo brightnessServo; const int potPin = A0; // Потенциометр const int ledPin = 9; // Светодиод void setup() { brightnessServo.attach(6); pinMode(ledPin, OUTPUT); } void loop() { int potValue = analogRead(potPin); int brightness = map(potValue, 0, 1023, 0, 255); // Преобразование значений analogWrite(ledPin, brightness); // Установка яркости LED // Управление сервомотором if (brightness > 128) { brightnessServo.write(90); // Угол 90, если яркость выше 50% } else { brightnessServo.write(0); // Угол 0, если яркость ниже 50% } delay(100); }
Описание: Окно открывается или закрывается в зависимости от температуры.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo windowServo; void setup() { dht.begin(); windowServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature > 25) { // Если температура выше 25°C windowServo.write(90); // Открываем окно } else { windowServo.write(0); // Закрываем окно } delay(1000); }
Описание: Интерактивный термометр, который показывает температуру с помощью сервомотора.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo pointerServo; void setup() { dht.begin(); pointerServo.attach(9); } void loop() { float temperature = dht.readTemperature(); int servoPos = map(temperature, 0, 50, 0, 180); // Преобразование температуры в угол pointerServo.write(servoPos); // Установка угла delay(1000); }
Описание: Управляет вентилятором на основе температуры и влажности.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo fanServo; void setup() { dht.begin(); fanServo.attach(9); } void loop() { float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); if (temperature > 30) { // Если температура выше 30°C fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Отключаем вентилятор } delay(1000); }
Описание: Система, которая срабатывает при обнаружении газа и включает светодиоды и зуммер.
cpp#include <Servo.h> const int gasSensorPin = A0; // Датчик газа const int ledPin = 9; // Светодиод const int buzzerPin = 10; // Зуммер void setup() { pinMode(ledPin, OUTPUT); pinMode(buzzerPin, OUTPUT); } void loop() { int gasLevel = analogRead(gasSensorPin); if (gasLevel > 300) { // Если уровень газа высок digitalWrite(ledPin, HIGH); // Включаем светодиод digitalWrite(buzzerPin, HIGH); // Включаем зуммер } else { digitalWrite(ledPin, LOW); // Выключаем светодиод digitalWrite(buzzerPin, LOW); // Выключаем зуммер } delay(1000); }
Описание: Система, которая не поливает растения, если ожидается дождь.
cpp#include <DHT.h> #include <Servo.h> #include <Wire.h> #include <RTClib.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo waterPumpServo; RTC_DS1307 rtc; void setup() { dht.begin(); waterPumpServo.attach(9); rtc.begin(); } void loop() { DateTime now = rtc.now(); float humidity = dht.readHumidity(); if (now.hour() == 8 && now.minute() == 0 && humidity < 50) { // Полив в 8:00, если влажность низкая waterPumpServo.write(90); // Включаем насос delay(5000); // Поливаем 5 секунд waterPumpServo.write(0); // Отключаем насос } delay(60000); // Проверяем каждую минуту }
Описание: Шторы автоматически открываются, когда уровень света высок.
cpp#include <Servo.h> Servo curtainServo; const int lightSensorPin = A0; // Датчик света void setup() { curtainServo.attach(9); } void loop() { int lightLevel = analogRead(lightSensorPin); if (lightLevel > 700) { // Если уровень света высок curtainServo.write(90); // Открываем шторы } else { curtainServo.write(0); // Закрываем шторы } delay(1000); }
Описание: Система, которая управляет сервомотором в зависимости от жестов, распознаваемых акселерометром.
cpp#include <Servo.h> #include <Wire.h> #include <Adafruit_MPU6050.h> Adafruit_MPU6050 mpu; Servo controlServo; void setup() { Serial.begin(115200); mpu.begin(); controlServo.attach(9); } void loop() { mpu.read(); if (mpu.getYAccel() > 500) { // Если обнаружено движение вверх controlServo.write(90); // Поворачиваем сервомотор } else if (mpu.getYAccel() < -500) { // Если движение вниз controlServo.write(0); // Возвращаем в исходное положение } delay(100); }
Описание: Вентилятор включается при превышении заданной температуры.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo fanServo; void setup() { dht.begin(); fanServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature > 30) { // Если температура выше 30°C fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Отключаем вентилятор } delay(1000); }
Описание: Система, управляющая сервомотором на основе данных, отправленных через мобильное приложение.
cpp#include <Servo.h> #include <DHT.h> #include <WiFi.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo controlServo; void setup() { dht.begin(); controlServo.attach(9); WiFi.begin("SSID", "PASSWORD"); // Подключение к WiFi } void loop() { float temperature = dht.readTemperature(); // Код для получения данных из приложения (заглушка) int appControlValue = 90; // Например, получаем значение из приложения controlServo.write(appControlValue); // Устанавливаем положение сервомотора delay(1000); }
Описание: Игрушка реагирует на касание, двигая сервомотором.
cpp#include <Servo.h> Servo toyServo; const int touchSensorPin = 2; // Датчик касания void setup() { toyServo.attach(9); pinMode(touchSensorPin, INPUT); } void loop() { if (digitalRead(touchSensorPin) == HIGH) { // Если касание toyServo.write(90); // Двигаем сервомотор delay(1000); toyServo.write(0); // Возвращаем в исходное положение } }
Описание: Завеса открывается и закрывается по расписанию.
cpp#include <Servo.h> #include <RTClib.h> Servo curtainServo; RTC_DS1307 rtc; void setup() { curtainServo.attach(9); rtc.begin(); } void loop() { DateTime now = rtc.now(); if (now.hour() == 7 && now.minute() == 0) { // Открываем завесу в 7:00 curtainServo.write(90); } if (now.hour() == 20 && now.minute() == 0) { // Закрываем в 20:00 curtainServo.write(0); } delay(60000); // Проверяем каждую минуту }
Описание: Система закрывает клапан при отсутствии воды.
cpp#include <Servo.h> Servo waterValveServo; const int waterLevelSensorPin = A0; // Датчик уровня воды void setup() { waterValveServo.attach(9); } void loop() { int waterLevel = analogRead(waterLevelSensorPin); if (waterLevel < 300) { // Если уровень воды низкий waterValveServo.write(90); // Закрываем клапан } else { waterValveServo.write(0); // Открываем клапан } delay(1000); }
Описание: Дорожный знак, который открывается или закрывается в зависимости от времени суток.
cpp#include <Servo.h> #include <RTClib.h> Servo trafficSignServo; RTC_DS1307 rtc; void setup() { trafficSignServo.attach(9); rtc.begin(); } void loop() { DateTime now = rtc.now(); if (now.hour() >= 18 || now.hour() < 6) { // Ночной режим trafficSignServo.write(90); // Открываем знак } else { trafficSignServo.write(0); // Закрываем знак } delay(60000); // Проверяем каждую минуту }
Описание: Кормушка, которая автоматически подает корм в заданное время.
cpp#include <Servo.h> #include <RTClib.h> Servo feederServo; RTC_DS1307 rtc; void setup() { feederServo.attach(9); rtc.begin(); } void loop() { DateTime now = rtc.now(); if (now.hour() == 8 && now.minute() == 0) { // Подавать корм в 8:00 feederServo.write(90); // Открываем кормушку delay(5000); // Открыто 5 секунд feederServo.write(0); // Закрываем кормушку } delay(60000); // Проверяем каждую минуту }
Описание: Светильник, который изменяет яркость в зависимости от уровня освещенности.
cpp#include <Servo.h> Servo lightServo; const int lightSensorPin = A0; // Датчик света void setup() { lightServo.attach(9); } void loop() { int lightLevel = analogRead(lightSensorPin); // Изменяем угол сервомотора в зависимости от уровня света int servoPosition = map(lightLevel, 0, 1023, 0, 180); lightServo.write(servoPosition); delay(1000); }
Описание: Робот-пылесос, который реагирует на препятствия и изменяет направление движения.
cpp#include <Servo.h> Servo leftWheel; Servo rightWheel; const int irSensorPin = 2; // ИК-датчик void setup() { leftWheel.attach(9); rightWheel.attach(10); pinMode(irSensorPin, INPUT); } void loop() { if (digitalRead(irSensorPin) == HIGH) { // Если обнаружено препятствие leftWheel.write(0); // Останавливаем левое колесо rightWheel.write(180); // Разворачиваем вправо delay(500); // Ждем 0.5 секунды } else { leftWheel.write(180); // Движение вперед rightWheel.write(0); } delay(100); }
Описание: Замок, который открывается с помощью кода, введенного через кнопочную панель.
cpp#include <Servo.h> #include <Keypad.h> const byte rows = 4; // Количество рядов const byte cols = 4; // Количество колонок char keys[rows][cols] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[rows] = {2, 3, 4, 5}; // Подключение рядов byte colPins[cols] = {6, 7, 8, 9}; // Подключение колонок Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); Servo lockServo; const String correctCode = "123A"; // Правильный код String enteredCode = ""; void setup() { lockServo.attach(10); lockServo.write(0); // Закрываем замок } void loop() { char key = keypad.getKey(); if (key) { enteredCode += key; // Добавляем нажатую кнопку в код if (enteredCode.length() == 4) { // Если введено 4 символа if (enteredCode == correctCode) { // Если код правильный lockServo.write(90); // Открываем замок delay(5000); // Открыто 5 секунд lockServo.write(0); // Закрываем замок } enteredCode = ""; // Сбрасываем код } } }
Описание: Система, которая следит за движущимися объектами и поворачивает камеру в их сторону.
cpp#include <Servo.h> #include <Adafruit_MPU6050.h> Adafruit_MPU6050 mpu; Servo cameraServo; void setup() { Serial.begin(115200); mpu.begin(); cameraServo.attach(9); } void loop() { mpu.read(); // Угол поворота камеры в зависимости от движения int angle = map(mpu.getYAccel(), -16000, 16000, 0, 180); cameraServo.write(angle); delay(100); }
Описание: Система, которая включает сигнализацию при обнаружении движения.
cpp#include <Servo.h> #include <DHT.h> const int pirSensorPin = 2; // PIR-датчик const int buzzerPin = 9; // Зуммер Servo securityServo; void setup() { securityServo.attach(10); pinMode(pirSensorPin, INPUT); pinMode(buzzerPin, OUTPUT); } void loop() { if (digitalRead(pirSensorPin) == HIGH) { // Если обнаружено движение securityServo.write(90); // Сигнализация digitalWrite(buzzerPin, HIGH); // Включаем зуммер delay(5000); // Действует 5 секунд digitalWrite(buzzerPin, LOW); // Выключаем зуммер securityServo.write(0); // Останавливаем сигнализацию } delay(1000); }
Описание: Устройство, которое поддерживает заданную температуру, включая или отключая обогреватель.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo heaterServo; void setup() { dht.begin(); heaterServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature < 22) { // Если температура ниже 22°C heaterServo.write(90); // Включаем обогреватель } else { heaterServo.write(0); // Выключаем обогреватель } delay(1000); }
Описание: Освещение включается при обнаружении движения.
cpp#include <Servo.h> Servo lightServo; const int pirSensorPin = 2; // PIR-датчик void setup() { lightServo.attach(9); pinMode(pirSensorPin, INPUT); } void loop() { if (digitalRead(pirSensorPin) == HIGH) { // Если обнаружено движение lightServo.write(90); // Включаем освещение } else { lightServo.write(0); // Выключаем освещение } delay(1000); }
Описание: Аудиосигнализация, которая активируется при обнаружении определенных условий.
cpp#include <Servo.h> #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo alarmServo; void setup() { dht.begin(); alarmServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature > 30) { // Если температура выше 30°C alarmServo.write(90); // Включаем сигнализацию delay(5000); // Действует 5 секунд alarmServo.write(0); // Отключаем сигнализацию } delay(1000); }
Описание: Устройство, которое управляет вентилятором и обогревателем в зависимости от температуры и влажности.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo fanServo; Servo heaterServo; void setup() { dht.begin(); fanServo.attach(9); heaterServo.attach(10); } void loop() { float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); if (temperature > 30) { // Если температура выше 30°C fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Выключаем вентилятор } if (humidity < 30) { // Если влажность ниже 30% heaterServo.write(90); // Включаем обогреватель } else { heaterServo.write(0); // Выключаем обогреватель } delay(1000); }
Описание: Устройство, которое контролирует уровень влажности почвы и включает насос для полива.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 // Подключение DHT датчика #define DHTTYPE DHT11 // Тип датчика DHT dht(DHTPIN, DHTTYPE); Servo pumpServo; // Серво для насоса void setup() { dht.begin(); pumpServo.attach(9); // Подключаем насос } void loop() { int soilMoisture = analogRead(A0); // Чтение уровня влажности почвы if (soilMoisture < 400) { // Если влажность ниже порога pumpServo.write(90); // Включаем насос delay(5000); // Поливаем 5 секунд pumpServo.write(0); // Отключаем насос } delay(10000); // Ждем 10 секунд перед следующим измерением }
Описание: Устройство, которое управляет яркостью света с помощью кнопки и сервопривода.
cpp#include <Servo.h> Servo lightServo; const int buttonPin = 2; // Кнопка int buttonState = 0; void setup() { lightServo.attach(9); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { // Если кнопка нажата lightServo.write(90); // Увеличиваем яркость delay(1000); lightServo.write(0); // Возвращаем яркость } delay(100); }
Описание: Устройство, которое открывает и закрывает жалюзи в зависимости от уровня света.
cpp#include <Servo.h> Servo blindsServo; const int lightSensorPin = A0; // Датчик света void setup() { blindsServo.attach(9); } void loop() { int lightLevel = analogRead(lightSensorPin); if (lightLevel < 300) { // Если свет низкий blindsServo.write(0); // Открываем жалюзи } else { blindsServo.write(90); // Закрываем жалюзи } delay(1000); }
Описание: Устройство, которое включает вентилятор при высокой температуре.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo fanServo; void setup() { dht.begin(); fanServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature > 25) { // Если температура выше 25°C fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Выключаем вентилятор } delay(1000); }
Описание: Устройство, которое включает звуковую сигнализацию при превышении определенной температуры.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo alarmServo; void setup() { dht.begin(); alarmServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature > 30) { // Если температура выше 30°C alarmServo.write(90); // Включаем сигнализацию delay(5000); // Сигнализация 5 секунд alarmServo.write(0); // Отключаем сигнализацию } delay(1000); }
Описание: Система, которая контролирует уровень влажности почвы и автоматически включает насос.
cpp#include <Servo.h> Servo pumpServo; const int soilMoisturePin = A0; // Датчик влажности почвы void setup() { pumpServo.attach(9); } void loop() { int soilMoisture = analogRead(soilMoisturePin); if (soilMoisture < 300) { // Если почва сухая pumpServo.write(90); // Включаем насос delay(5000); // Поливаем 5 секунд pumpServo.write(0); // Отключаем насос } delay(10000); // Проверяем каждые 10 секунд }
Описание: Устройство, которое включает вентилятор при повышенном уровне CO2.
cpp#include <Servo.h> Servo fanServo; const int co2SensorPin = A0; // Датчик CO2 void setup() { fanServo.attach(9); } void loop() { int co2Level = analogRead(co2SensorPin); if (co2Level > 800) { // Если уровень CO2 выше 800 ppm fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Выключаем вентилятор } delay(1000); }
Описание: Устройство, которое поддерживает заданную температуру, включая обогреватель или вентилятор.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo heaterServo; Servo fanServo; void setup() { dht.begin(); heaterServo.attach(9); fanServo.attach(10); } void loop() { float temperature = dht.readTemperature(); if (temperature < 20) { // Если температура ниже 20°C heaterServo.write(90); // Включаем обогреватель } else { heaterServo.write(0); // Выключаем обогреватель } if (temperature > 25) { // Если температура выше 25°C fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Выключаем вентилятор } delay(1000); }
Описание: Устройство, которое включает сигнализацию при обнаружении движения.
cpp#include <Servo.h> Servo alarmServo; const int pirSensorPin = 2; // PIR-датчик void setup() { alarmServo.attach(9); pinMode(pirSensorPin, INPUT); } void loop() { if (digitalRead(pirSensorPin) == HIGH) { // Если обнаружено движение alarmServo.write(90); // Включаем сигнализацию delay(5000); // Сигнализация 5 секунд alarmServo.write(0); // Отключаем сигнализацию } delay(1000); }
Описание: Замок, который открывается с помощью RFID-метки.
cpp#include <Servo.h> #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 // Подключение к пину SS #define RST_PIN 9 // Подключение к пину RST MFRC522 mfrc522(SS_PIN, RST_PIN); Servo doorServo; void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); doorServo.attach(8); doorServo.write(0); // Дверь закрыта } void loop() { if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { if (mfrc522.uid.uidByte[0] == 0xDE && mfrc522.uid.uidByte[1] == 0xAD) { // Проверка UID doorServo.write(90); // Открываем дверь delay(5000); // Открыто 5 секунд doorServo.write(0); // Закрываем дверь } mfrc522.PICC_HaltA(); // Остановить считывание карты } }
Описание: Устройство, которое включает сигнализацию при превышении температуры в холодильнике.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo alarmServo; void setup() { dht.begin(); alarmServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature > 5) { // Если температура выше 5°C alarmServo.write(90); // Включаем сигнализацию delay(5000); // Сигнализация 5 секунд alarmServo.write(0); // Выключаем сигнализацию } delay(1000); }
Описание: Устройство, которое открывает и закрывает ворота по нажатию кнопки.
cpp#include <Servo.h> Servo gateServo; const int buttonPin = 2; // Кнопка int buttonState = 0; void setup() { gateServo.attach(9); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { // Если кнопка нажата gateServo.write(90); // Открываем ворота delay(5000); // Держим открытыми 5 секунд gateServo.write(0); // Закрываем ворота } delay(100); }
Описание: Устройство, которое включает насос, если уровень воды поднимается слишком высоко.
cpp#include <Servo.h> Servo pumpServo; const int waterLevelPin = A0; // Датчик уровня воды void setup() { pumpServo.attach(9); } void loop() { int waterLevel = analogRead(waterLevelPin); if (waterLevel > 700) { // Если уровень воды высокий pumpServo.write(90); // Включаем насос delay(5000); // Работаем 5 секунд pumpServo.write(0); // Отключаем насос } delay(10000); // Проверяем каждые 10 секунд }
Описание: Устройство, которое контролирует влажность почвы и температуру, чтобы включать насос.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo pumpServo; void setup() { dht.begin(); pumpServo.attach(9); } void loop() { int soilMoisture = analogRead(A0); float temperature = dht.readTemperature(); if (soilMoisture < 300 && temperature > 20) { // Если почва сухая и температура выше 20°C pumpServo.write(90); // Включаем насос delay(5000); // Поливаем 5 секунд pumpServo.write(0); // Отключаем насос } delay(10000); // Проверяем каждые 10 секунд }
Описание: Устройство, которое открывает жалюзи при низком уровне света.
cpp#include <Servo.h> Servo blindsServo; const int lightSensorPin = A0; // Датчик света void setup() { blindsServo.attach(9); } void loop() { int lightLevel = analogRead(lightSensorPin); if (lightLevel < 300) { // Если свет низкий blindsServo.write(0); // Открываем жалюзи } else { blindsServo.write(90); // Закрываем жалюзи } delay(1000); }
Описание: Устройство, которое включает сигнализацию при обнаружении дыма.
cpp#include <Servo.h> Servo alarmServo; const int smokeSensorPin = A0; // Датчик дыма void setup() { alarmServo.attach(9); } void loop() { int smokeLevel = analogRead(smokeSensorPin); if (smokeLevel > 400) { // Если уровень дыма высокий alarmServo.write(90); // Включаем сигнализацию delay(5000); // Сигнализация 5 секунд alarmServo.write(0); // Отключаем сигнализацию } delay(1000); }
Описание: Устройство, которое закрывает дверь через заданное время после открытия.
cpp#include <Servo.h> Servo doorServo; const int buttonPin = 2; // Кнопка int buttonState = 0; void setup() { doorServo.attach(9); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { // Если кнопка нажата doorServo.write(90); // Открываем дверь delay(5000); // Держим открытыми 5 секунд doorServo.write(0); // Закрываем дверь } delay(100); }
Описание: Устройство, которое активирует полив, когда считывается определенная RFID-метка.
cpp#include <Servo.h> #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 // Подключение к пину SS #define RST_PIN 9 // Подключение к пину RST MFRC522 mfrc522(SS_PIN, RST_PIN); Servo pumpServo; void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); pumpServo.attach(8); } void loop() { if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { if (mfrc522.uid.uidByte[0] == 0xDE && mfrc522.uid.uidByte[1] == 0xAD) { // Проверка UID pumpServo.write(90); // Включаем насос delay(5000); // Поливаем 5 секунд pumpServo.write(0); // Отключаем насос } mfrc522.PICC_HaltA(); // Остановить считывание карты } }
Описание: Устройство, которое включает вентилятор при высокой влажности.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo fanServo; void setup() { dht.begin(); fanServo.attach(9); } void loop() { float humidity = dht.readHumidity(); if (humidity > 70) { // Если влажность выше 70% fanServo.write(90); // Включаем вентилятор } else { fanServo.write(0); // Выключаем вентилятор } delay(1000); }
Описание: Устройство, которое управляет жалюзи с помощью Bluetooth-соединения.
cpp#include <Servo.h> #include <SoftwareSerial.h> Servo blindsServo; SoftwareSerial bluetooth(10, 11); // RX, TX void setup() { blindsServo.attach(9); bluetooth.begin(9600); } void loop() { if (bluetooth.available()) { char command = bluetooth.read(); if (command == 'o') { // Команда открыть blindsServo.write(0); // Открываем } else if (command == 'c') { // Команда закрыть blindsServo.write(90); // Закрываем } } }
Описание: Устройство, которое включает и выключает свет в зависимости от времени суток.
cpp#include <Wire.h> #include <RTClib.h> #include <Servo.h> RTC_DS1307 rtc; Servo lightServo; void setup() { rtc.begin(); lightServo.attach(9); // Настройка времени (в реальном проекте лучше не выставлять время в коде) // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Настройка времени на время компиляции } void loop() { DateTime now = rtc.now(); if (now.hour() >= 18 || now.hour() < 6) { // Включаем свет с 18:00 до 6:00 lightServo.write(0); // Включаем свет } else { lightServo.write(90); // Выключаем свет } delay(60000); // Проверяем каждую минуту }
Описание: Устройство, которое контролирует уровень влажности в нескольких участках.
cpp#include <Servo.h> Servo pumpServo; const int soilMoisturePin1 = A0; // Датчик 1 const int soilMoisturePin2 = A1; // Датчик 2 void setup() { pumpServo.attach(9); } void loop() { int moisture1 = analogRead(soilMoisturePin1); int moisture2 = analogRead(soilMoisturePin2); if (moisture1 < 300 || moisture2 < 300) { // Если хотя бы один участок сухой pumpServo.write(90); // Включаем насос delay(5000); // Поливаем 5 секунд pumpServo.write(0); // Отключаем насос } delay(10000); // Проверяем каждые 10 секунд }
Описание: Устройство, которое включает запись, когда обнаружено движение.
cpp#include <Servo.h> Servo cameraServo; const int motionSensorPin = 2; // Датчик движения void setup() { cameraServo.attach(9); pinMode(motionSensorPin, INPUT); } void loop() { int motionDetected = digitalRead(motionSensorPin); if (motionDetected == HIGH) { // Если обнаружено движение cameraServo.write(90); // Включаем запись delay(5000); // Записываем 5 секунд cameraServo.write(0); // Отключаем запись } delay(1000); }
Описание: Устройство, которое включает обогреватель при низкой температуре.
cpp#include <DHT.h> #include <Servo.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Servo heaterServo; void setup() { dht.begin(); heaterServo.attach(9); } void loop() { float temperature = dht.readTemperature(); if (temperature < 18) { // Если температура ниже 18°C heaterServo.write(90); // Включаем обогреватель } else { heaterServo.write(0); // Выключаем обогреватель } delay(1000); }
Описание: Устройство, которое открывает дверь при считывании определенной метки.
cpp#include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 // Подключение к пину SS #define RST_PIN 9 // Подключение к пину RST MFRC522 mfrc522(SS_PIN, RST_PIN); Servo doorServo; void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); doorServo.attach(8); } void loop() { if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { if (mfrc522.uid.uidByte[0] == 0xDE && mfrc522.uid.uidByte[1] == 0xAD) { // Проверка UID doorServo.write(90); // Открываем дверь delay(5000); // Держим открытой 5 секунд doorServo.write(0); // Закрываем дверь } mfrc522.PICC_HaltA(); // Остановить считывание карты } }
Описание: Устройство, которое реагирует на нажатие кнопок и управляет сервоприводом.
cpp#include <Servo.h> Servo gameServo; const int buttonPin1 = 2; // Кнопка 1 const int buttonPin2 = 3; // Кнопка 2 void setup() { gameServo.attach(9); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); } void loop() { if (digitalRead(buttonPin1) == HIGH) { // Если нажата кнопка 1 gameServo.write(0); // Позиция 1 delay(1000); } if (digitalRead(buttonPin2) == HIGH) { // Если нажата кнопка 2 gameServo.write(90); // Позиция 2 delay(1000); } }
Описание: Устройство, которое открывает замок по Bluetooth-команде.
cpp#include <Servo.h> #include <SoftwareSerial.h> Servo lockServo; SoftwareSerial bluetooth(10, 11); // RX, TX void setup() { lockServo.attach(9); bluetooth.begin(9600); } void loop() { if (bluetooth.available()) { char command = bluetooth.read(); if (command == 'o') { // Команда открыть lockServo.write(90); // Открываем замок delay(5000); // Держим открытым 5 секунд lockServo.write(0); // Закрываем замок } } }
Описание: Устройство, которое управляет жалюзи с помощью IR-пульта.
cpp#include <Servo.h> #include <IRremote.h> Servo blindsServo; const int recv_pin = 2; IRrecv irrecv(recv_pin); decode_results results; void setup() { blindsServo.attach(9); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { if (results.value == 0x1FE48B7) { // Код для открытия blindsServo.write(0); // Открываем } else if (results.value == 0x1FE58A7) { // Код для закрытия blindsServo.write(90); // Закрываем } irrecv.resume(); } }
Описание: Устройство, которое движет сервоприводом в зависимости от времени.
cpp#include <Wire.h> #include <RTClib.h> #include <Servo.h> RTC_DS1307 rtc; Servo clockServo; void setup() { rtc.begin(); clockServo.attach(9); } void loop() { DateTime now = rtc.now(); // Пример перемещения сервопривода по часам clockServo.write(map(now.hour(), 0, 23, 0, 180)); // Угол от 0 до 180 delay(60000); // Обновляем каждую минуту }
Описание: Устройство, которое включает и выключает свет и вентиляцию в зависимости от присутствия людей и уровня освещенности.
cpp#include <Servo.h> Servo lightServo; Servo fanServo; const int motionSensorPin = 2; // Датчик движения const int lightSensorPin = A0; // Датчик света void setup() { lightServo.attach(9); fanServo.attach(10); pinMode(motionSensorPin, INPUT); } void loop() { int motionDetected = digitalRead(motionSensorPin); int lightLevel = analogRead(lightSensorPin); if (motionDetected == HIGH && lightLevel < 300) { // Если есть движение и свет низкий lightServo.write(0); // Включаем свет fanServo.write(90); // Включаем вентилятор } else { lightServo.write(90); // Выключаем свет fanServo.write(0); // Выключаем вентилятор } delay(1000); }
Описание: Простой проект, где светодиод мигает с интервалом в одну секунду.
cppconst int ledPin = 13; // Пин, к которому подключен светодиод void setup() { pinMode(ledPin, OUTPUT); // Устанавливаем пин как выход } void loop() { digitalWrite(ledPin, HIGH); // Включаем светодиод delay(1000); // Ждем 1 секунду digitalWrite(ledPin, LOW); // Выключаем светодиод delay(1000); // Ждем 1 секунду }
Описание: Чтение значения с потенциометра и вывод его на последовательный монитор.
cppconst int potPin = A0; // Пин, к которому подключен потенциометр void setup() { Serial.begin(9600); // Инициализируем последовательный монитор } void loop() { int potValue = analogRead(potPin); // Чтение значения с потенциометра Serial.println(potValue); // Вывод значения в последовательный монитор delay(500); // Ждем 500 мс }
Описание: Включение и выключение светодиода по нажатию кнопки.
cppconst int buttonPin = 2; // Пин, к которому подключена кнопка const int ledPin = 13; // Пин, к которому подключен светодиод int buttonState = 0; // Переменная для хранения состояния кнопки void setup() { pinMode(ledPin, OUTPUT); // Устанавливаем пин как выход pinMode(buttonPin, INPUT); // Устанавливаем пин как вход } void loop() { buttonState = digitalRead(buttonPin); // Чтение состояния кнопки if (buttonState == HIGH) { // Если кнопка нажата digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } }
Описание: Чтение температуры с цифрового термометра DS18B20.
cpp#include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(2); // Пин для подключения датчика DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); // Инициализация датчика } void loop() { sensors.requestTemperatures(); // Запрос температуры Serial.print("Температура: "); Serial.println(sensors.getTempCByIndex(0)); // Вывод температуры в градусах Цельсия delay(1000); }
Описание: Измерение расстояния с помощью ультразвукового датчика.
cppconst int trigPin = 9; // Пин для триггера const int echoPin = 10; // Пин для эха void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(trigPin, LOW); // Установка триггера в низкое состояние delayMicroseconds(2); digitalWrite(trigPin, HIGH); // Установка триггера в высокое состояние delayMicroseconds(10); digitalWrite(trigPin, LOW); // Возврат триггера в низкое состояние long duration = pulseIn(echoPin, HIGH); // Измерение продолжительности long distance = duration * 0.034 / 2; // Преобразование в расстояние Serial.print("Расстояние: "); Serial.print(distance); Serial.println(" см"); delay(1000); }
Описание: Включение светодиода при обнаружении движения.
cppconst int pirPin = 2; // Пин для PIR const int ledPin = 13; // Пин для светодиода void setup() { pinMode(ledPin, OUTPUT); pinMode(pirPin, INPUT); Serial.begin(9600); } void loop() { int pirState = digitalRead(pirPin); // Чтение состояния PIR if (pirState == HIGH) { digitalWrite(ledPin, HIGH); // Включаем светодиод Serial.println("Движение обнаружено!"); } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } }
Описание: Извещение при обнаружении движения с помощью пьезоизлучателя.
cppconst int pirPin = 2; // Пин для PIR const int piezoPin = 9; // Пин для пьезоизлучателя void setup() { pinMode(piezoPin, OUTPUT); pinMode(pirPin, INPUT); Serial.begin(9600); } void loop() { int pirState = digitalRead(pirPin); if (pirState == HIGH) { digitalWrite(piezoPin, HIGH); // Включаем пьезоизлучатель Serial.println("Движение обнаружено!"); delay(1000); // Сигнализация 1 секунда } else { digitalWrite(piezoPin, LOW); // Выключаем пьезоизлучатель } }
Описание: Изменение угла поворота сервопривода в зависимости от положения потенциометра.
cpp#include <Servo.h> Servo myServo; const int potPin = A0; // Пин для потенциометра void setup() { myServo.attach(9); // Подключаем сервопривод } void loop() { int potValue = analogRead(potPin); // Чтение значения с потенциометра int angle = map(potValue, 0, 1023, 0, 180); // Преобразование в угол myServo.write(angle); // Установка угла delay(15); // Ждем, чтобы сервопривод успел повернуться }
Описание: Мигающий светодиод в круге.
cppconst int ledCount = 8; // Количество светодиодов int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Пины для светодиодов void setup() { for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); // Устанавливаем пины как выход } } void loop() { for (int i = 0; i < ledCount; i++) { digitalWrite(ledPins[i], HIGH); // Включаем светодиод delay(100); digitalWrite(ledPins[i], LOW); // Выключаем светодиод } }
Описание: Считывание значения с фоторезистора и вывод на последовательный монитор.
cppconst int lightSensorPin = A0; // Пин для фоторезистора void setup() { Serial.begin(9600); // Инициализация последовательного монитора } void loop() { int lightValue = analogRead(lightSensorPin); // Чтение значения с фоторезистора Serial.print("Значение света: "); Serial.println(lightValue); // Вывод значения на монитор delay(500); // Ждем 500 мс }
Описание: Чтение данных с датчика DHT11.
cpp#include <DHT.h> #define DHTPIN 2 // Пин, к которому подключен датчик #define DHTTYPE DHT11 // Тип датчика DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); // Инициализация датчика } void loop() { float h = dht.readHumidity(); // Чтение влажности float t = dht.readTemperature(); // Чтение температуры Serial.print("Влажность: "); Serial.print(h); Serial.print("%, Температура: "); Serial.print(t); Serial.println("°C"); delay(2000); // Ждем 2 секунды }
Описание: Включение светодиода при превышении заданного порога температуры.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 #define LEDPIN 13 DHT dht(DHTPIN, DHTTYPE); void setup() { pinMode(LEDPIN, OUTPUT); Serial.begin(9600); dht.begin(); } void loop() { float t = dht.readTemperature(); if (t > 30) { // Если температура больше 30 градусов digitalWrite(LEDPIN, HIGH); // Включаем светодиод } else { digitalWrite(LEDPIN, LOW); // Выключаем светодиод } delay(2000); }
Описание: Считывание данных с датчика влажности почвы и вывод на монитор.
cppconst int soilMoisturePin = A0; // Пин для датчика влажности void setup() { Serial.begin(9600); } void loop() { int moistureLevel = analogRead(soilMoisturePin); // Чтение уровня влажности Serial.print("Уровень влажности: "); Serial.println(moistureLevel); delay(1000); }
Описание: Изменение цвета RGB-светодиода по нажатию кнопки.
cppconst int buttonPin = 2; // Пин для кнопки const int redPin = 9; // Пин для красного канала const int greenPin = 10; // Пин для зеленого канала const int bluePin = 11; // Пин для синего канала int colorState = 0; // Переменная для хранения состояния цвета void setup() { pinMode(buttonPin, INPUT); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { colorState++; // Увеличиваем состояние цвета if (colorState > 2) { colorState = 0; // Сброс состояния цвета } switch (colorState) { case 0: // Красный analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 0); break; case 1: // Зеленый analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 0); break; case 2: // Синий analogWrite(redPin, 0); analogWrite(greenPin, 0); analogWrite(bluePin, 255); break; } delay(500); } }
Описание: Измерение уровня освещенности и управление светодиодом.
cppconst int lightSensorPin = A0; // Пин для фоторезистора const int ledPin = 9; // Пин для светодиода void setup() { pinMode(ledPin, OUTPUT); } void loop() { int lightValue = analogRead(lightSensorPin); // Чтение уровня освещенности if (lightValue < 200) { // Если уровень света низкий digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(1000); }
Описание: Отображение температуры на LCD-дисплее.
cpp#include <DHT.h> #include <LiquidCrystal.h> #define DHTPIN 2 #define DHTTYPE DHT11 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(16, 2); dht.begin(); } void loop() { float t = dht.readTemperature(); lcd.clear(); lcd.print("Температура:"); lcd.setCursor(0, 1); lcd.print(t); lcd.print(" C"); delay(2000); }
Описание: Управление светодиодом в зависимости от наличия дождя.
cppconst int rainSensorPin = A0; // Пин для датчика дождя const int ledPin = 9; // Пин для светодиода void setup() { pinMode(ledPin, OUTPUT); } void loop() { int rainValue = analogRead(rainSensorPin); // Чтение значения с датчика if (rainValue < 500) { // Если дождь digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(1000); }
Описание: Чтение данных с MPU6050 и вывод их на последовательный монитор.
cpp#include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Serial.begin(9600); Wire.begin(); mpu.initialize(); } void loop() { int16_t ax, ay, az; mpu.getAcceleration(&ax, &ay, &az); // Чтение данных акселерометра Serial.print("ax: "); Serial.print(ax); Serial.print(" ay: "); Serial.print(ay); Serial.print(" az: "); Serial.println(az); delay(500); }
Описание: Создание простого светодиодного шоу.
cppconst int ledCount = 3; // Количество светодиодов int ledPins[] = {9, 10, 11}; // Пины для светодиодов void setup() { for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); } } void loop() { for (int i = 0; i < ledCount; i++) { digitalWrite(ledPins[i], HIGH); // Включаем светодиод delay(200); digitalWrite(ledPins[i], LOW); // Выключаем светодиод } }
Описание: Считывание данных с GPS модуля.
cpp#include <TinyGPS++.h> #include <HardwareSerial.h> TinyGPSPlus gps; HardwareSerial serialGPS(1); // Используем Serial1 для GPS void setup() { Serial.begin(9600); serialGPS.begin(9600); // Инициализация GPS } void loop() { while (serialGPS.available()) { gps.encode(serialGPS.read()); // Чтение данных GPS if (gps.location.isUpdated()) { Serial.print("Широта: "); Serial.print(gps.location.lat(), 6); Serial.print(", Долгота: "); Serial.println(gps.location.lng(), 6); } } }
Описание: Автоматический полив растений с использованием датчика влажности.
cppconst int soilMoisturePin = A0; // Пин для датчика влажности const int pumpPin = 9; // Пин для управления насосом void setup() { pinMode(pumpPin, OUTPUT); } void loop() { int moistureLevel = analogRead(soilMoisturePin); if (moistureLevel < 300) { // Если уровень влажности низкий digitalWrite(pumpPin, HIGH); // Включаем насос delay(5000); // Полив 5 секунд digitalWrite(pumpPin, LOW); // Выключаем насос } delay(10000); // Ждем 10 секунд перед следующей проверкой }
Описание: Измерение пульса с помощью датчика MAX30100.
cpp#include <Wire.h> #include "MAX30100_PulseOximeter.h" MAX30100_PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); // Обновление данных Serial.print("Пульс: "); Serial.print(pox.getHeartRate()); Serial.println(" bpm"); delay(1000); }
Описание: Включение одного светодиода при нажатии кнопки и другого при отпускании.
cppconst int buttonPin = 2; // Пин для кнопки const int ledOnPin = 9; // Пин для светодиода "включено" const int ledOffPin = 10; // Пин для светодиода "выключено" void setup() { pinMode(buttonPin, INPUT); pinMode(ledOnPin, OUTPUT); pinMode(ledOffPin, OUTPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { digitalWrite(ledOnPin, HIGH); // Включаем светодиод "включено" digitalWrite(ledOffPin, LOW); // Выключаем светодиод "выключено" } else { digitalWrite(ledOnPin, LOW); digitalWrite(ledOffPin, HIGH); // Включаем светодиод "выключено" } }
Описание: Подсветка кнопки при нажатии.
cppconst int buttonPin = 2; // Пин для кнопки const int ledPin = 9; // Пин для подсветки void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { digitalWrite(ledPin, HIGH); // Включаем подсветку } else { digitalWrite(ledPin, LOW); // Выключаем подсветку } }
Описание: Имитация работы светофора.
cppconst int redPin = 9; // Пин для красного света const int yellowPin = 10; // Пин для желтого света const int greenPin = 11; // Пин для зеленого света void setup() { pinMode(redPin, OUTPUT); pinMode(yellowPin, OUTPUT); pinMode(greenPin, OUTPUT); } void loop() { digitalWrite(redPin, HIGH); // Красный delay(5000); digitalWrite(redPin, LOW); digitalWrite(greenPin, HIGH); // Зеленый delay(5000); digitalWrite(greenPin, LOW); digitalWrite(yellowPin, HIGH); // Желтый delay(2000); digitalWrite(yellowPin, LOW); }
Описание: Управление светодиодом с помощью сенсорного переключателя.
cppconst int touchPin = 2; // Пин для сенсора const int ledPin = 9; // Пин для светодиода void setup() { pinMode(touchPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(touchPin) == HIGH) { digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } }
Описание: Управление светодиодами в зависимости от уровня воды.
cppconst int waterLevelPin = A0; // Пин для датчика уровня воды const int ledLowPin = 9; // Светодиод для низкого уровня const int ledHighPin = 10; // Светодиод для высокого уровня void setup() { pinMode(ledLowPin, OUTPUT); pinMode(ledHighPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterLevelPin); if (waterLevel < 300) { // Низкий уровень digitalWrite(ledLowPin, HIGH); digitalWrite(ledHighPin, LOW); } else { digitalWrite(ledLowPin, LOW); digitalWrite(ledHighPin, HIGH); // Высокий уровень } }
Описание: Извещение с помощью пьезоизлучателя при нажатии кнопки.
cppconst int buttonPin = 2; // Пин для кнопки const int piezoPin = 9; // Пин для пьезоизлучателя void setup() { pinMode(buttonPin, INPUT); pinMode(piezoPin, OUTPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { tone(piezoPin, 1000); // Включаем звук } else { noTone(piezoPin); // Выключаем звук } }
Описание: Управление светодиодной матрицей.
cpp#include <Adafruit_GFX.h> #include <Adafruit_LEDBackpack.h> Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); void setup() { matrix.begin(0x70); // Адрес I2C } void loop() { matrix.drawPixel(0, 0, LED_RED); // Включаем красный светодиод matrix.writeDisplay(); delay(500); matrix.clear(); // Выключаем светодиоды matrix.writeDisplay(); delay(500); }
Описание: Измерение расстояния с помощью ультразвукового датчика и отображение значения на OLED-дисплее.
cpp#include <Wire.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); const int trigPin = 9; const int echoPin = 10; void setup() { Serial.begin(9600); display.begin(SSD1306_I2C_ADDRESS, OLED_RESET); display.clearDisplay(); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); long distance = duration * 0.034 / 2; display.clearDisplay(); display.setCursor(0, 0); display.print("Расстояние: "); display.print(distance); display.print(" см"); display.display(); delay(1000); }
Описание: Чтение метки RFID и управление светодиодом.
cpp#include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); } void loop() { if (!mfrc522.PICC_IsNewCardPresent()) return; if (!mfrc522.PICC_ReadCardSerial()) return; Serial.print("UID:"); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i], DEC); Serial.print(" "); } Serial.println(); mfrc522.PICC_HaltA(); }
Описание: Отображение температуры и влажности на LCD-дисплее.
cpp#include <LiquidCrystal.h> #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(16, 2); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); lcd.clear(); lcd.print("Temp:"); lcd.print(t); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Humidity:"); lcd.print(h); lcd.print("%"); delay(2000); }
Описание: Управление светодиодами в зависимости от уровня влажности.
cppconst int moisturePin = A0; const int ledLowPin = 9; const int ledHighPin = 10; void setup() { pinMode(ledLowPin, OUTPUT); pinMode(ledHighPin, OUTPUT); } void loop() { int moistureValue = analogRead(moisturePin); if (moistureValue < 300) { digitalWrite(ledLowPin, HIGH); digitalWrite(ledHighPin, LOW); } else { digitalWrite(ledLowPin, LOW); digitalWrite(ledHighPin, HIGH); } delay(1000); }
Описание: Управление вентилятором в зависимости от температуры.
cpp#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 const int fanPin = 9; DHT dht(DHTPIN, DHTTYPE); void setup() { pinMode(fanPin, OUTPUT); dht.begin(); } void loop() { float t = dht.readTemperature(); if (t > 25) { digitalWrite(fanPin, HIGH); // Включаем вентилятор } else { digitalWrite(fanPin, LOW); // Выключаем вентилятор } delay(2000); }
Описание: Управление светодиодом в зависимости от уровня освещенности.
cppconst int lightSensorPin = A0; const int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int lightValue = analogRead(lightSensorPin); if (lightValue < 200) { digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(1000); }
Описание: Измерение частоты пульса с помощью фотодатчика.
cpp#include <PulseOximeter.h> PulseOximeter pox; void setup() { Serial.begin(9600); pox.begin(); } void loop() { pox.update(); Serial.print("Пульс: "); Serial.println(pox.getHeartRate()); delay(1000); }
Описание: Простой интерфейс для управления устройством.
cppconst int buttonPin = 2; const int ledPin = 9; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } }
Описание: Управление сервомотором с помощью кнопки.
cpp#include <Servo.h> const int buttonPin = 2; const int servoPin = 9; Servo myServo; void setup() { myServo.attach(servoPin); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { myServo.write(90); // Угол 90 градусов } else { myServo.write(0); // Угол 0 градусов } }
Описание: Управление освещением в зависимости от уровня освещенности.
cppconst int lightSensorPin = A0; const int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int lightValue = analogRead(lightSensorPin); if (lightValue < 200) { digitalWrite(ledPin, HIGH); // Включаем светодиод } else { digitalWrite(ledPin, LOW); // Выключаем светодиод } delay(1000); }
Описание: Управление насосом в зависимости от уровня воды.
cppconst int waterLevelPin = A0; const int pumpPin = 9; void setup() { pinMode(pumpPin, OUTPUT); } void loop() { int waterLevel = analogRead(waterLevelPin); if (waterLevel < 300) { digitalWrite(pumpPin, HIGH); // Включаем насос } else { digitalWrite(pumpPin, LOW); // Выключаем насос } delay(1000); }
Описание: Игрок должен нажать кнопку, когда светодиод загорится.
cppconst int buttonPin = 2; const int ledPin = 9; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); randomSeed(analogRead(0)); } void loop() { digitalWrite(ledPin, HIGH); delay(random(500, 3000)); // Задержка от 0.5 до 3 секунд digitalWrite(ledPin, LOW); unsigned long startTime = millis(); while (millis() - startTime < 2000) { // Игрок имеет 2 секунды if (digitalRead(buttonPin) == HIGH) { Serial.println("Вы нажали вовремя!"); return; } } Serial.println("Слишком поздно!"); }
Описание: Игрок должен нажать кнопку в правильном порядке.
cppconst int buttonPin = 2; const int ledPin1 = 9; const int ledPin2 = 10; const int ledPin3 = 11; int sequence[3] = {1, 2, 3}; // Последовательность int userInput[3]; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); randomSeed(analogRead(0)); } void loop() { for (int i = 0; i < 3; i++) { int led = random(1, 4); digitalWrite(led + 8, HIGH); delay(1000); digitalWrite(led + 8, LOW); delay(500); } // Сбор ввода от пользователя for (int i = 0; i < 3; i++) { while (true) { if (digitalRead(buttonPin) == HIGH) { userInput[i] = i + 1; break; } } } // Проверка последовательности for (int i = 0; i < 3; i++) { if (userInput[i] != sequence[i]) { Serial.println("Неправильная последовательность!"); return; } } Serial.println("Правильно!"); }
Описание: Arduino генерирует случайное число, игрок должен угадать его.
cppint randomNumber; const int buttonPin = 2; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); randomSeed(analogRead(0)); randomNumber = random(1, 101); // Генерация числа от 1 до 100 } void loop() { Serial.println("Угадайте число от 1 до 100:"); while (true) { if (digitalRead(buttonPin) == HIGH) { int guess = random(1, 101); // Получение случайного предположения Serial.print("Ваше предположение: "); Serial.println(guess); if (guess == randomNumber) { Serial.println("Вы угадали!"); break; } else if (guess < randomNumber) { Serial.println("Слишком маленькое число!"); } else { Serial.println("Слишком большое число!"); } } } }
Описание: Простая версия игры "Змейка" с использованием матрицы светодиодов.
cpp#include <Adafruit_GFX.h> #include <Adafruit_LEDBackpack.h> Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); int snakeX[10] = {0, 0, 0}; int snakeY[10] = {0, 1, 2}; int foodX, foodY; void setup() { matrix.begin(0x70); placeFood(); } void loop() { // Управление и логика игры matrix.clear(); for (int i = 0; i < 3; i++) { matrix.drawPixel(snakeX[i], snakeY[i], LED_GREEN); } matrix.drawPixel(foodX, foodY, LED_RED); matrix.writeDisplay(); delay(500); } void placeFood() { foodX = random(0, 8); foodY = random(0, 8); }
Описание: Arduino воспроизводит мелодию, игрок должен угадать ноту.
cpp#include <Tone.h> const int buttonPin = 2; Tone tone1; void setup() { pinMode(buttonPin, INPUT); Serial.begin(9600); } void loop() { int note = random(261, 523); // Генерация случайной ноты tone1.begin(9); tone1.play(note); delay(2000); tone1.stop(); // Ожидание ввода while (true) { if (digitalRead(buttonPin) == HIGH) { Serial.print("Вы угадали ноту: "); Serial.println(note); break; } } }
Описание: Игрок должен нажать кнопку как можно быстрее после включения светодиода.
cppconst int buttonPin = 2; const int ledPin = 9; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); randomSeed(analogRead(0)); } void loop() { digitalWrite(ledPin, HIGH); unsigned long startTime = millis(); delay(random(2000, 5000)); // Задержка от 2 до 5 секунд digitalWrite(ledPin, LOW); while (digitalRead(buttonPin) == LOW); // Ожидание нажатия unsigned long reactionTime = millis() - startTime; Serial.print("Ваше время реакции: "); Serial.print(reactionTime); Serial.println(" мс"); }
Описание: Игрок должен нажимать кнопку, когда светодиод загорится, но не когда он выключится.
cppconst int buttonPin = 2; const int ledPin = 9; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); randomSeed(analogRead(0)); } void loop() { digitalWrite(ledPin, HIGH); delay(random(1000, 5000)); // Задержка от 1 до 5 секунд digitalWrite(ledPin, LOW); // Ожидание нажатия кнопки if (digitalRead(buttonPin) == HIGH) { Serial.println("Вы нажали слишком рано!"); } delay(2000); }
Описание: Arduino зажигает последовательность светодиодов, игрок должен повторить.
cpp#include <Adafruit_GFX.h> #include <Adafruit_LEDBackpack.h> Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); int sequence[10]; int length = 0; void setup() { matrix.begin(0x70); randomSeed(analogRead(0)); } void loop() { // Генерация новой последовательности length++; sequence[length - 1] = random(0, 8); // Показать последовательность for (int i = 0; i < length; i++) { matrix.clear(); matrix.drawPixel(sequence[i], 0, LED_GREEN); matrix.writeDisplay(); delay(1000); } // Ожидание ввода игрока for (int i = 0; i < length; i++) { // Ввод игрока здесь } matrix.clear(); }
Описание: Игрок должен нажимать кнопку, чтобы "двигаться вперед".
cppconst int buttonPin = 2; int position = 0; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { position++; Serial.print("Вы находитесь на позиции: "); Serial.println(position); delay(1000); // Задержка перед следующим ходом } }
Описание: Игрок должен нажимать на кнопки, когда точка загорается.
cpp#include <Adafruit_GFX.h> #include <Adafruit_LEDBackpack.h> Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); const int buttonPin1 = 2; const int buttonPin2 = 3; int currentLed; void setup() { matrix.begin(0x70); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); randomSeed(analogRead(0)); } void loop() { currentLed = random(0, 8); matrix.clear(); matrix.drawPixel(currentLed, 0, LED_GREEN); matrix.writeDisplay(); // Ожидание нажатия кнопки while (true) { if (digitalRead(buttonPin1) == HIGH || digitalRead(buttonPin2) == HIGH) { if (digitalRead(buttonPin1) == HIGH) { Serial.println("Кнопка 1 нажата!"); } if (digitalRead(buttonPin2) == HIGH) { Serial.println("Кнопка 2 нажата!"); } break; } } delay(2000); }
Описание: Игрок должен нажать кнопку, чтобы "попасть в цель".
cppconst int buttonPin = 2; int score = 0; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { score++; Serial.print("Ваш счет: "); Serial.println(score); delay(1000); } }
Описание: Игрок должен нажимать кнопку, чтобы перемещать светодиод по матрице.
cpp#include <Adafruit_GFX.h> #include <Adafruit_LEDBackpack.h> Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); const int buttonPin = 2; int position = 0; void setup() { matrix.begin(0x70); pinMode(buttonPin, INPUT); } void loop() { matrix.clear(); matrix.drawPixel(position, 0, LED_GREEN); matrix.writeDisplay(); if (digitalRead(buttonPin) == HIGH) { position++; if (position > 7) position = 0; // Зацикливаем delay(500); } delay(100); }
Описание: Игрок должен нажать кнопку до того, как таймер закончится.
cppconst int buttonPin = 2; unsigned long startTime; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { delay(random(2000, 5000)); startTime = millis(); while (millis() - startTime < 3000) { // 3 секунды нажатия if (digitalRead(buttonPin) == HIGH) { Serial.println("Вы нажали вовремя!"); return; } } Serial.println("Вы не успели!"); }
Описание: Игрок должен нажать кнопку в случайный момент времени.
cppconst int buttonPin = 2; unsigned long waitTime; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); randomSeed(analogRead(0)); } void loop() { waitTime = random(2000, 5000); delay(waitTime); Serial.println("Нажмите кнопку!"); while (true) { if (digitalRead(buttonPin) == HIGH) { Serial.print("Вы нажали через "); Serial.print(waitTime); Serial.println(" мс!"); break; } } }
Описание: Игрок должен удерживать кнопку, чтобы "прыгнуть".
cppconst int buttonPin = 2; int position = 0; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { position++; Serial.print("Шарик на высоте: "); Serial.println(position); delay(1000); // Время прыжка } }
Описание: Игрок должен набирать очки, зажигая светодиоды.
cpp#include <Adafruit_GFX.h> #include <Adafruit_LEDBackpack.h> Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); const int buttonPin = 2; int score = 0; void setup() { matrix.begin(0x70); pinMode(buttonPin, INPUT); } void loop() { matrix.clear(); for (int i = 0; i < score; i++) { matrix.drawPixel(i, 0, LED_GREEN); } matrix.writeDisplay(); if (digitalRead(buttonPin) == HIGH) { score++; if (score > 7) score = 0; // Зацикливаем delay(1000); } }
Описание: Игрок должен нажимать кнопку, когда светодиод загорается.
cppconst int buttonPin = 2; const int ledPin = 9; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); randomSeed(analogRead(0)); } void loop() { delay(random(2000, 5000)); digitalWrite(ledPin, HIGH); unsigned long startTime = millis(); while (true) { if (digitalRead(buttonPin) == HIGH) { unsigned long reactionTime = millis() - startTime; Serial.print("Ваше время реакции: "); Serial.println(reactionTime); digitalWrite(ledPin, LOW); delay(2000); break; } } digitalWrite(ledPin, LOW); }
Описание: Игрок должен реагировать на изменение цвета светофора.
cppconst int buttonPin = 2; const int redPin = 9; const int yellowPin = 10; const int greenPin = 11; void setup() { pinMode(buttonPin, INPUT); pinMode(redPin, OUTPUT); pinMode(yellowPin, OUTPUT); pinMode(greenPin, OUTPUT); } void loop() { // Красный digitalWrite(redPin, HIGH); delay(3000); digitalWrite(redPin, LOW); // Желтый digitalWrite(yellowPin, HIGH); delay(1000); digitalWrite(yellowPin, LOW); // Зеленый digitalWrite(greenPin, HIGH); delay(3000); digitalWrite(greenPin, LOW); }
Описание: Игрок должен пройти лабиринт, нажимая кнопку.
cppconst int buttonPin = 2; int position = 0; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH) { position++; Serial.print("Вы находитесь на позиции: "); Serial.println(position); delay(1000); } }
Описание: Игрок должен реагировать на случайные появления "машин".
cppconst int buttonPin = 2; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { delay(random(1000, 5000)); Serial.println("Машина появилась! Нажмите кнопку!"); while (true) { if (digitalRead(buttonPin) == HIGH) { Serial.println("Вы угнали машину!"); break; } } }